Проблема с методом setLayoutParams в пользовательском интерфейсе Android
Я делаю приложение, в котором мне нужно изменить программный интерфейс.
Мне нужно было изменить атрибуты layout_height
и layout_width
XML.
Но когда я использую метод setLayoutParams
, приложение запускается, а затем я даю сообщение о том, что он неожиданно прекратил работу, и мне нужно принудительно закрыть.
Я попытался установить LayoutParams как ViewGroup.LayoutParams
.
Но ничего не работает. Просьба проверить прилагаемый код и руководство.
Это код Java.
private void fixLayoutVmain(){
ListView lv;
ImageButton rev,stop,play,forw;
lv=(ListView)findViewById(R.id.ListMain);
rev=(ImageButton)findViewById(R.id.rev);
stop=(ImageButton)findViewById(R.id.stop);
play=(ImageButton)findViewById(R.id.plpa);
forw=(ImageButton)findViewById(R.id.forw);
Log.d("DEV1","ID have been assigned");
LayoutParams lp=new LayoutParams(W, ((75*H)/100));
Log.d("DEV1","param object created");
lv.setLayoutParams(lp);
Log.d("DEV1","ListView param set");
lp.height=(int)(10*H)/100;
lp.width=(int)(10*H)/100;
Log.d("DEV1","Changes to param made");
rev.setLayoutParams(lp);
Log.d("DEV1","Reverse Button param applied");
stop.setLayoutParams(lp);
Log.d("DEV1","Stop button param applied");
play.setLayoutParams(lp);
Log.d("DEV1","forward button param applied");
forw.setLayoutParams(lp);
Log.d("DEV1","All imagebutton changes have been made");
}
Это файл XML
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListVieW
android:id="@+id/ListMain"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="bottom">
<ImageButton
android:id="@+id/rev"
android:src="@drawable/reverseimg"
android:background="@null"
android:scaleType="fitXY" />
<ImageButton
android:id="@+id/stop"
android:src="@drawable/stopimg"
android:background="@null"
android:scaleType="fitXY" />
<ImageButton
android:id="@+id/plpa"
android:src="@drawable/playimg"
android:background="@null"
android:scaleType="fitXY" />
<ImageButton
android:id="@+id/forw"
android:src="@drawable/forwardimg"
android:background="@null"
android:scaleType="fitXY" />
</LinearLayout>
</LinearLayout>
Ответы
Ответ 1
Каждый раз, когда вы устанавливаете LayoutParams, проверьте родительский контейнер View. Во всех ваших экземплярах родителем является LinearLayout. Вам нужно использовать LinearLayout.LayoutParams, например:
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(width, height);
lv.setLayoutParams(lp);
Независимо от того, что ваша особая сила закрывает проблему или нет, мы не знаем. Как указано в комментариях, вы должны проверить LogCat и опубликовать данные об исключениях здесь. Попробуйте хотя бы попробовать и посмотрите, исправляет ли она проблему.
Ответ 2
Похоже, что ваше приложение вылетает из строя, потому что вы не предоставили андроид: layout_width и android: layout_height для своих ImageButtons.
Даже если вы собираетесь установить ширину и высоту кода, вам нужно добавить эти параметры в свой XML файл для каждого ImageButton:
<ImageButton
android:id="@+id/rev"
android:src="@drawable/reverseimg"
android:background="@null"
android:scaleType="fitXY"
android:layout_height="0dp"
android:layout_width="0dp"
/>
Ответ 3
Я снова проверил и сделал оба изменения, как сказано в приведенных выше ответах.
Это все еще не сработало.
Однако я узнал, что я выполнял функцию до того, как использовал метод setContentView().
Поскольку представление не было создано, изменения не могут быть сделаны.
Таким образом, моя функция после метода setContentView()
заставила его работать нормально.
Спасибо в любом случае.