Проблема с методом setLayoutParams в пользовательском интерфейсе Android - PullRequest
4 голосов
/ 09 февраля 2011

Я подаю заявку, в которой мне нужно программно изменить пользовательский интерфейс. Мне нужно было изменить 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's 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>

Ответы [ 3 ]

10 голосов
/ 09 февраля 2011

Каждый раз, когда вы устанавливаете LayoutParams, проверяйте родительский контейнер представления. Во всех ваших случаях родителем является LinearLayout. Вам нужно использовать LinearLayout.LayoutParams, например так:

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(width, height);
lv.setLayoutParams(lp);

Независимо от того, является ли это вашей конкретной проблемой или нет, у нас нет возможности узнать. Как указано в комментариях, вы должны проверить LogCat и опубликовать детали исключения здесь. Попробуйте и посмотрите, решит ли это проблему.

2 голосов
/ 09 февраля 2011

Похоже, ваше приложение вылетает из-за того, что вы не добавили android: 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"
    />
0 голосов
/ 10 февраля 2011

Я снова проверил и внес оба изменения, как указано в ответах выше.Это все еще не работало.

Однако я узнал, что выполнял функцию, прежде чем использовал метод setContentView ().Так как представление не было создано, изменения не могли быть сделаны.

Поэтому, поместив мою функцию после метода setContentView(), он заработал нормально.

В любом случае спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...