android UI中setLayoutParams方法的问题

时间:2011-02-09 18:28:05

标签: android android-layout

我正在制作一个应用程序,我必须在其中更改UI programmaticaly。 我需要更改layout_heightlayout_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 个答案:

答案 0 :(得分:10)

每次设置LayoutParams时,请检查View的父容器。在所有实例中,父级是LinearLayout。您需要使用LinearLayout.LayoutParams,如下所示:

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

这是否是你的特殊力量关闭问题,我们无从知晓。如评论中所述,您应该检查LogCat并在此处发布异常详细信息。试试这个,看看它是否解决了这个问题。

答案 1 :(得分:2)

看起来您的应用程序崩溃了,因为您没有为您的ImageButtons提供android:layout_width和android:layout_height。

即使您要在代码中设置宽度和高度,也需要将这些参数添加到每个ImageButton的xml文件中:

<ImageButton                
  android:id="@+id/rev"               
  android:src="@drawable/reverseimg"  
  android:background="@null"  
  android:scaleType="fitXY"                                               
  android:layout_height="0dp"
  android:layout_width="0dp"
    />

答案 2 :(得分:0)

我再次检查并按上述答案中的说明进行了更改。 它仍然无效。

但是我发现在使用setContentView()方法之前我正在执行该函数。 由于尚未创建视图,因此无法进行更改。

所以在setContentView()方法之后放置我的函数使它工作正常。

非常感谢。