2016-05-25 19 views
0

Ich versuche einen Button zu meinem RelativLayout hinzuzufügen. Es funktioniert, aber die Tasten überlappen sich. Ich glaube, ich übergebe die LayoutParams, oder ich verwende die falschen Methoden, aber ich weiß es nicht.Wie programmatisch eine Schaltfläche hinzufügen?

Dies ist nur ein Test. In der endgültigen Version möchte ich eine unbestimmte Anzahl von Schaltflächen zu einem scrollView mit einem relativLayout hinzufügen.

public class MainActivity extends AppCompatActivity { 

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

    Button button = (Button) findViewById(R.id.button); 

    button.setOnClickListener(
      new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 


        Button myButton = new Button(MainActivity.this); 
        myButton.setText("Push Me"); 

        RelativeLayout ll = (RelativeLayout)findViewById(R.id.relative_main); 
        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT); 
        lp.topMargin = R.id.button; 
        myButton.setLayoutParams(lp); 
        ll.addView(myButton); 

       } 
      } 
    ); 
} 
} 

Die XML-Datei:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.example.freddy.test.MainActivity" 
android:id="@+id/relative_main"> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Add new Button" 
    android:id="@+id/button" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentStart="true" /> 
</RelativeLayout> 

Antwort

0

Die Tasten sind einander überlappen, weil Sie eine RelativeLayout verwenden, ohne zu sagen, an dem Ort ist die Taste, um das Layout gehen relativ soll. Etwas, das Ihnen helfen könnte, ein LinearLayout anstelle von RelativeLayout zu verwenden und die Schaltflächen hinzuzufügen.

0

Aber das ist nur ein Test, in der Endfassung i eine unbestimmte Anzahl von Tasten auf einem Scrollview mit einem relativLayout in es hinzufügen möchten.

Wenn Ihr Problem ist, dass

die Tasten sind einander überlappen

Es ist relativ einfach zu lösen. Verwenden Sie stattdessen <LinearLayout> Fügen Sie in Ihrem Stamm-Tag nur ein Attribut mit der Bezeichnung android:orientation="vertical" oder android:orientation="horizontal" hinzu.

Es gibt auch Attribute, um dies für eine RelativeLayout zu lösen, aber es ist ein wenig komplexer. Wenn dies Probleme sind, die ich oft habe, schlage ich vor, Sie nehmen this natürlich.

Beispiel: Dies gibt Ihnen mehr Kontrolle über die relativen Layout Kinder

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="horizontal"> 

      <Button 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" /> 

      <Button 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" /> 

      <Button 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" /> 

      <Button 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" /> 

     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="horizontal"> 

      <Button 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" /> 

      <Button 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" /> 

      <Button 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" /> 

      <Button 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" /> 

     </LinearLayout> 

    </LinearLayout> 

</ScrollView> 
+0

in der Endfassung gibt es 4 Tasten in einer Reihe und das funktioniert nur mit einem RelativLayout und ich möchte eine hinzufügen undefinierte Anzahl dieser Zeilen – Locki

+0

Ich habe ein Beispiel hinzugefügt, es sollte auch mit LinearLayout funktionieren, aber ich bin mir nicht sicher, ob das gemeint ist. –

+0

Ok danke Mann, aber ich habe schon eine Lösung gefunden, aber tolle Arbeit! – Locki

0

Try diese statt FrameLayout.LayoutParams zu verwenden (da Ihre Eltern Layout ist ein RelativeLayout)

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 

Sie können an einer anderen Ansicht dadurch ausrichten: params.addRule (RelativLayout.BELOW, R.id.putyourviewhere);

Dies ist, wenn Sie bei RelativeLayout bleiben. Aber die Lösung von LinearLayout ist auch in Ordnung.Aber RelativeLayout hat mehr Kontrolle

+0

Danke, es hat funktioniert !!! – Locki

0

Wie Sie ein RelativeLayout verwenden Sie haben toRightOF zu verwenden, wenn Sie die Tasten wollen horizontal ausgekleidet werden oder below, wenn Sie die Knöpfe wollen vertikal, gefüttert werden, um hinzuzufügen, alle sie programmatisch, fügen sie einfach es in der Regel zu Ihrem layoutParams:

lp.addRule(RelativeLayout.RIGHT_OF, R.id.button); 

ODER

lp.addRule(RelativeLayout.BELOW, R.id.button); 
+1

Danke, es hat funktioniert !! – Locki

+0

groß :) so freundlich akzeptieren Sie meine Antwort, da es Ihr Problem gelöst hat –

0
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT); 


lp.topMargin = R.id.button; 
// use some meaningful margin, R.id.button can return any integer value. 


// you have issue with alignment of button 

ll.addView(myButton); 
// with this call your button should be in view hierarchy now you have to align your button. best is use RelativeLayout.LayoutParams and make your button relative(top/bottom/left/right) to some other component in viewgroup(RelativeLayout). 
0

OK, versuchen nun weitere Parameter hinzufügen, um das Layout zu steuern, wie CENTER_HORIZONTAL Zentrierung

params.addRule(RelativeLayout.CENTER_HORIZONTAL, -1); // -1 means that CENTER_HORIZONTAL doesn't take a view as a parameter 
Verwandte Themen