Размещение строк виджетов в Android - PullRequest
0 голосов
/ 14 января 2012

Я пытаюсь использовать файл макета для размещения строк TextViews и кнопок. Это должно выглядеть примерно так:

Row 1: [ TextView ( ~2/3 of the screen ) ] [ Button (~1/3 of the screen) ]

Row 2: [ TextView ( ~2/3 of the screen ) ] [ Button (~1/3 of the screen) ]

Row 3: [ TextView ( ~2/3 of the screen ) ] [ Button (~1/3 of the screen) ]

Row 4: [ TextView ( ~2/3 of the screen ) ] [ Button (~1/3 of the screen) ]

Row 5: [ TextView ( ~2/3 of the screen ) ] [ Button (~1/3 of the screen) ]

.....

Я не совсем понимаю, как это сделать. Могу ли я сделать это с помощью TableLayout или RelativeLayouts? Может кто-нибудь показать мне пример кода, так как я понятия не имею, как использовать XML. Большое спасибо за вашу помощь!

1 Ответ

1 голос
/ 14 января 2012

да, вы можете сделать это с помощью LinearLayout - android: weightSum , вот пример для одной строки,

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:weightSum="0.1" >

        <TextView
            android:text="left" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:layout_weight="0.33" /> 

        <Button
            android:text="right" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:layout_weight="0.67" />

    </LinearLayout>


РЕДАКТИРОВАТЬ: Я вижу, что вы не поняли, как его использовать, скажем, у вас есть два макета, (main.xml и list_template.xml)

main.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ScrollView01" android:layout_width="fill_parent"
android:layout_height="fill_parent">


    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/mainLayout"
    >

    </LinearLayout>
</ScrollView>

list_template.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:weightSum="100" >

        <TextView
            android:text="left" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:layout_weight="33"
            android:id="@+id/list_textView" /> 

        <Button
            android:text="right" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:layout_weight="67" 
            android:id="@+id/list_button" />

    </LinearLayout>

list_template - это шаблон макета для одной строки списка, мы его раздуем. Как?

public class StackoverflowActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle b) {
        super.onCreate(b);
        setContentView(R.layout.main);

        LinearLayout mainLayout = (LinearLayout) findViewById(R.id.mainLayout);
        LayoutInflater li =  (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        for (int i = 0; i < 5;  i++){
               View tempView = li.inflate(R.layout.list_template, null);

               TextView list_textView = (TextView) tempView.findViewById(R.id.list_textView);
               list_textView.setText("TextView"+i);

               Button list_button = (Button) tempView.findViewById(R.id.list_button);
               list_button.setText("Button"+i);
               list_button.setId(i);

               list_button.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    //Button clicked
                    Toast.makeText(StackoverflowActivity.this, "Button" + v.getId() + " clicked", Toast.LENGTH_SHORT).show();
                }
            });
               mainLayout.addView(tempView);
            }
    }
}
...