Android Layout - 如何根据屏幕大小创建动态表格布局?

时间:2014-08-28 23:58:53

标签: android android-layout android-fragments android-tablelayout

我需要为它创建2个片段布局吗?第一个布局是(FirstName,Gender,Category等),第二个布局是(LastName,DOB等......)

然后根据屏幕尺寸使用片段进行排列?

但我觉得不对好吗?因为那时我们需要决定在一个布局中需要放多少行。

实现它的最佳方法是什么?

在平板电脑中查看: enter image description here

在手机中查看: enter image description here

1 个答案:

答案 0 :(得分:1)

使用单个片段或活动,然后针对不同的屏幕尺寸使用不同的布局。取向。如果使用单独的片段,则处理用户交互的代码将位于多个位置。使用单个片段或活动将使您的代码更加简单。

以下是一些示例布局,可帮助您入门。我正在使用所有TextView,但你可以很容易地用Spinner替换性别TextView。

对于手机或小屏幕,您可以使用此布局:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/first_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Chee"/>

    <TextView
        android:id="@+id/last_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Kin"/>

    <TextView
        android:id="@+id/gender"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Male"/>

    <TextView
        android:id="@+id/date_of_birth"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="dd/mm/yy"/>

</LinearLayout>

然后对于横向或更大的屏幕,这个将把姓氏和出生日期放在第二列。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/first_name"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Chee"/>

        <TextView
            android:id="@+id/last_name"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Kin"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/gender"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Male"/>

        <TextView
            android:id="@+id/date_of_birth"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:hint="dd/mm/yy"/>

    </LinearLayout>
</LinearLayout>

为他们提供相同的文件名(例如person_info.xml),并将它们放在资源文件夹中,以用于不同的屏幕尺寸&amp;取向。 (例如布局和布局 - 土地)。

在您的片段onCreate()中,然后您可以根据用户的屏幕尺寸&amp;来扩充布局和Android处理选择正确的文件。取向。

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        fragmentView = inflater.inflate(R.layout.person_info, container, false);

        firstNameTextView = (TextView) fragmentView.findViewById(R.id.first_name);
        lastNameTextView = fragmentView.findViewById(R.id.last_name);
        genderTextView = (TextView) fragmentView.findViewById(R.id.gender);
        dobTextView = (TextView) fragmentView.findViewById(R.id.date_of_birth);

        return fragmentView;
}

由于TextViews在两种布局中都具有相同的android:id,因此无论加载哪种布局,您的代码都可以将它们视为相同。