Android相对布局列表视图故障

时间:2012-02-08 04:01:09

标签: android list layout view relative

我的相对布局中有一个列表视图。 我想要一个列表视图,然后是一个editext,后面是2个按钮 像这样: ListView NEWLINE EditText NEWLINE Button1 Button2 NEWLINE

我有代码,如果列表很小,一切顺利。如果列表中有许多元素,那将占用所有空间,我将无法看到editText或按钮,

我已将其修剪到问题开始的部分:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ListView android:id="@+id/in"
    android:layout_below="@id/button_contacts"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:stackFromBottom="true"
    android:transcriptMode="alwaysScroll"
    android:layout_weight="1.0" 
    />
    <EditText
        android:id="@+id/entry"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@android:drawable/editbox_background"
        android:layout_below="@id/in" />

   <Button
        android:id="@+id/Convert"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@id/entry"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="10dip"
        android:text="Convert" />
   <Button
    android:id="@+id/sendSMS"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_toLeftOf="@id/Convert"
        android:layout_alignTop="@id/Convert"
        android:text="Send" />


</RelativeLayout>

任何人都有任何想法如何解决这个问题? 感谢

编辑:卸妆加倍“

3 个答案:

答案 0 :(得分:2)

以下代码适用于我,我希望它也适合你...

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              style="@style/MainLinearLayout">"

<TableLayout    android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:orientation="vertical" 
                style="@style/MainTableLayoutStyle">

    <ListView android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:id="@android:id/list"
              android:layout_weight="1"
              android:cacheColorHint="@color/transparent" 

              >

    </ListView>

    <TableRow>
       <EditText
            android:id="@+id/entry"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:drawable/editbox_background"
            android:layout_below="@id/in" />

    </TableRow>

    <TableRow >

    <Button  android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:id="@+id/button1"
                 android:text="button1"
                 android:layout_gravity="left"
                 android:layout_weight="1"
                 />

    <Button  android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:id="@+id/button1"
                 android:text="button2"
                 android:layout_gravity="right"
                 android:layout_weight="1"
                 />


    </TableRow>

</TableLayout>

</LinearLayout>

答案 1 :(得分:0)

您需要为列表视图指定一个固定的高度。

 <ListView android:id="@+id/in"
    android:layout_below="@id/button_contacts"
    android:layout_width="fill_parent"
    android:layout_height="100dp"
    android:stackFromBottom="true"
    android:transcriptMode="alwaysScroll"
    android:layout_weight="1.0" 
    />

另一种选择是在代码中以编程方式设置高度。如果你这样做,你需要在Activity的onWindowFocused()方法中做。然后,您可以通过编程方式将其设置为屏幕的一半。

Private LinearLayout llfullscreen;//llfullscreen is the viewgroup 
                                  //that stretches the whole screen
Private ListView lv;

/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        llfullscreen = findViewById(R.id.bottomcontrol)
}
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
            if(hasFocus && llfullscreen!=null){
        int layoutHeight = llfullscreen.getHeight(); 
                ViewGroup.LayoutParams params = lv.getLayoutParams();
        params.height = lv/2; //Set to half the screens size
        this.lv.setLayoutParams(params);
        this.lv.invalidate();
             }
    }

答案 2 :(得分:0)

因为在ListView中你使用android:layout_weight =&#34; 1.0&#34;所以,它占用了所有空间。你应该添加1个布局来包装你的Text,Buttom等并添加这个android:layout_weight =&#34; 2.0&#34;或3.0(由你决定)尝试。

P.S。如果它仍然无法工作For Try更改所有android:layout_height =&#34; fill_parent&#34;到android:layout_height =&#34; wrap_content&#34;

    <ListView android:id="@+id/in"
        android:layout_below="@id/button_contacts"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:stackFromBottom="true"
        android:transcriptMode="alwaysScroll"
        android:layout_weight="1.0" 
        />
<Relativelaout
        android:id="@+id/bottomcontrol"
        android:layout_below="@id/in"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:layout_weight="2.0">
<EditText
        android:id="@+id/entry"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@android:drawable/editbox_background"
         />

   <Button
        android:id="@+id/Convert"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@id/entry"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="10dip"
        android:text="Convert" />
   <Button
    android:id="@+id/sendSMS"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_toLeftOf="@id/Convert"
        android:layout_alignTop="@id/Convert"
        android:text="Send" />
</RelativeLayout>