Création de linearlayout en cliquant sur le bouton
-
26-12-2019 - |
Question
Alors, je veux ajouter (Créer) linearlayout dans l'application de travail en cliquant sur le bouton.Et je fais presque cela, quelque chose ajoutez (espace libre), mais je ne vois rien.
Pour vérifier, si la mise en page a été ajoutée, je mets TextView en elle.
my_layout.xml
<LinearLayout
android:id="@+id/layout_for_sides"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/title_side_size_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1 side size:" />
<EditText
android:id="@+id/inp_side_width_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:hint="cm"
android:inputType="number" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/inp_side_height_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:hint="cm"
android:inputType="number" >
</EditText>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/btn_add_side"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Add side" />
<Button
android:id="@+id/btn_calc_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Enter" />
</LinearLayout>
MainActivity.java
public class MainActivity extends Activity implements OnClickListener {
Button btn_add_side;
LinearLayout layout_for_sides;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
layout_for_sides = (LinearLayout) findViewById(R.id.layout_for_sides);
btn_add_side = (Button) findViewById(R.id.btn_add_side);
btn_add_side.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_add_side:
LinearLayout newlayout = new LinearLayout(this);
newlayout.setOrientation(LinearLayout.VERTICAL);
newlayout.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT, 1));
newlayout.setBackgroundColor(Color.BLACK); //IT DOESN'T WORK, THERE IS NOTHING WITH BLACK BACKGROUND
layout_for_sides.addView(newlayout);
LayoutParams lpView = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
TextView tv = new TextView(this);
tv.setText("TextView");
tv.setId(5);
tv.setTextColor(Color.BLACK);
this.newlayout.addView(tv, lpView); //IT WORKS, I SEE FREE SPACE, BUT NEITHER TEXT
break;
default:
break;
}
}
}
question est (résolu): pourquoi je ne vois rien?Seul l'espace libre apparaît, mais pas de Textveiw.
La solution 2
Problème dans les mauvais paramètres de parent linéarlayout - layout_for_sides.
Il a Android: Orientation="horizontal", mais a besoin d'Android: Orientation="vertical". À cause de cela, je n'ai rien vu.
Autres conseils
Essayez ceci:
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_add_side:
LinearLayout newlayout = new LinearLayout(this);
newlayout.setOrientation(LinearLayout.VERTICAL);
newlayout.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT, 1));
//<---------------------Try this-------------------->
layout_for_sides.addView(newlayout,new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT, 1));
LayoutParams lpView = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
TextView tv = new TextView(this);
this.newlayout.addView(tv, lpView); //IT WORKS, I SEE FREE SPACE, BUT NEITHER TEXT
tv.setText("TextView");
tv.setId(5);
tv.setTextColor(Color.BLACK);
newlayout.setBackgroundColor(Color.BLACK); //IT DOESN'T WORK, THERE IS NOTHING WITH BLACK BACKGROUND
break;
default:
break;
}
}