Я создаю очень простое действие, в котором я создаю и устанавливаю представление в коде Java вместо XML. Ширина, которую я передаю внешнему LinearLayout, не имеет никакого эффекта (200). Представление отображается по всей ширине экрана, независимо от того, какое значение я передаю здесь.
(Обратите внимание, что это всего лишь пример кода; я знаю, что в реальном приложении вы не используете фиксированные значения. Я просто хочу указать на мою проблему здесь для упрощения пояснения).
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// outer linear layout
LinearLayout ll = new LinearLayout(this);
ll.setLayoutParams(new LinearLayout.LayoutParams(
200, // *** this param has no effect, regardless of the value I set here ***
LinearLayout.LayoutParams.FILL_PARENT
));
ll.setBackgroundColor(Color.parseColor("#00ff00"));
// inner linear layout
LinearLayout ll2 = new LinearLayout(this);
ll2.setLayoutParams(new LinearLayout.LayoutParams(
100, // ** this width for the inner view is working fine **
LinearLayout.LayoutParams.FILL_PARENT
));
ll2.setBackgroundColor(Color.parseColor("#0000ff"));
ll.addView(ll2);
setContentView(ll);
}
}
Но если я заменю setContentView(ll);
и использую вместо этого макет xml, где внешний LinearLayout имеет значение 200px, он применяется правильно, и представление занимает только 200px экрана.
setContentView(com.example.R.layout.main);
где main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="200px"
android:layout_height="fill_parent"
android:background="#ff0000"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
Почему установка фиксированной ширины в Java-коде для внешнего макета не имеет никакого эффекта?