2017-10-03 15 views
0

空のActivity_mainレイアウトがあります。私は画面幅の特定の%でなければならないボタンの数を追加したいので、私はそれらをプログラムで追加したいと思います。このサイトのすべての例では、LinearLayoutを使用しています。 Activity_mainに直接ボタンを追加することは可能ですか?アンドロイドの空のMainActivityにボタンを追加することはできますか?

ありがとうございました。

+0

アクティビティには、ルートビューであるViewGroupがあります。そのViewGroupにボタンをアタッチする必要があります。 –

答えて

3

ViewGroupは、レイアウトとビューコンテナの基本クラスであるため、ViewGroupが必要です。

線形レイアウトを使用しない場合は、制約レイアウトを使用できます。制約レイアウトにはGuidelinesが付いています。これらは、画面の特定のパーセンテージを測定し、ボタン(またはビュー)をその横に並べるのに役立ちます。

guidelines with constraintlayout

上記画像は、ガイドラインの仕組みの一例です。 1つ目は、画面の25%を占める垂直方向のガイドラインです(画面を垂直に4つに分割すると考えることができます)。 2つ目は画面の50%を占める水平ガイドラインです(画面を水平に2つに分割)。

私はあなたがガイドラインでこれを達成することができ、画面幅

の特定%でなければならないボタンの数を追加したいです。ここだけのxmlを使用してそれを行う方法は次のとおりです。

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.chornge.myapplication.MainActivity"> 

    <android.support.constraint.Guideline 
     android:id="@+id/vertical_guideline" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     app:layout_constraintGuide_percent="0.25" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:layout_constraintLeft_toRightOf="@id/vertical_guideline" /> 

    <android.support.constraint.Guideline 
     android:id="@+id/horizontal_guideline" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     app:layout_constraintGuide_percent="0.50" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:layout_constraintTop_toBottomOf="@id/horizontal_guideline" /> 

</android.support.constraint.ConstraintLayout> 

そして、ここではJavaを使用して同じ効果を作成する方法は次のとおりです。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // setContentView(R.layout.activity_main); 

    ConstraintLayout constraintLayout = new ConstraintLayout(this); 
    constraintLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
      ViewGroup.LayoutParams.MATCH_PARENT)); 
    setContentView(constraintLayout); 

    /* vertical guideline */ 

    Guideline verticalGuide = new Guideline(this); 
    ConstraintLayout.LayoutParams verticalGuideParams = 
      new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
        ViewGroup.LayoutParams.WRAP_CONTENT); 

    verticalGuideParams.guidePercent = 0.25f; 
    verticalGuideParams.orientation = LinearLayout.VERTICAL; 
    verticalGuide.setLayoutParams(verticalGuideParams); 
    verticalGuide.setId(View.generateViewId()); 
    constraintLayout.addView(verticalGuide); 

    /* create button1 and align its left edge to the right edge of vertical guideline*/ 

    Button button1 = new Button(this); 
    button1.setId(View.generateViewId()); 
    ConstraintLayout.LayoutParams button1Params = 
      new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
        ViewGroup.LayoutParams.WRAP_CONTENT); 

    button1Params.leftToRight = verticalGuide.getId(); 
    button1.setLayoutParams(button1Params); 
    constraintLayout.addView(button1); 

    /* horizontal guideline */ 

    Guideline horizontalGuide = new Guideline(this); 
    ConstraintLayout.LayoutParams horizontalGuideParams = 
      new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
        ViewGroup.LayoutParams.WRAP_CONTENT); 

    horizontalGuideParams.guidePercent = 0.5f; 
    horizontalGuideParams.orientation = LinearLayout.HORIZONTAL; 
    horizontalGuide.setLayoutParams(horizontalGuideParams); 
    horizontalGuide.setId(View.generateViewId()); 
    constraintLayout.addView(horizontalGuide); 

    /* create button2 and align its top edge to the bottom edge of horizontal guideline*/ 

    Button button2 = new Button(this); 
    button2.setId(View.generateViewId()); 
    ConstraintLayout.LayoutParams button2Params = 
      new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
        ViewGroup.LayoutParams.WRAP_CONTENT); 

    button2Params.topToBottom = horizontalGuide.getId(); 
    button2.setLayoutParams(button2Params); 
    constraintLayout.addView(button2); 
} 

  • あなたはまだのViewGroupを必要とします(LinearLayoutまたはRelativeLayoutまたはConstraintLayout)
  • 任意のビュー(Button、Tex tView、EditTextなど)をtopToTopまたはtopToBottomまたはbottomToTopまたはbottomToBottomまたはleftToLeftまたはleftToRightまたはrightToLeftまたはrightToRightを使用して、別のViewまたはViewGroupと整列させます。
  • 5%、33.3%、80%はそれぞれ0.05f,0.333f,0.8fとなります。
+1

これは完璧に動作します – Pizzarius

関連する問題