Неисправность представления списка относительной компоновки Android - PullRequest
1 голос
/ 08 февраля 2012

У меня есть некоторая двойка с представлением списка в моем относительном расположении.Я хочу иметь представление списка, за которым следует редактирование текста, за которым следуют 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>

У кого-нибудь есть идеи, как это решить?Спасибо

РЕДАКТИРОВАТЬ: Remover в два раза "

Ответы [ 3 ]

2 голосов
/ 08 февраля 2012

приведенный ниже код работает для меня, и я надеюсь, что он будет работать и для вас ...

<?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>
0 голосов
/ 08 февраля 2012

Потому что в ListView вы используете android: layout_weight = "1.0", поэтому он занял все пространство. Вы должны добавить 1 макет, чтобы обернуть текст, кнопку и т. д., и добавьте этот android: layout_weight = "2.0" или 3.0 (решать только вам). Попробуйте.

P.S. Если это все еще не работает, попробуйте изменить все Android: layout_height = "fill_parent" На Android: layout_height = "wrap_content"

    <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>
0 голосов
/ 08 февраля 2012

Вы должны задать вашему списку фиксированную высоту.

 <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" 
    />

Другой вариант - программно установить высоту в коде.Если вы делаете это, вам нужно сделать это в методе 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();
             }
    }
...