0

我需要爲它創建2個片段佈局嗎?第一佈局是(名字,性別,類別等),第二佈局是(姓氏,DOB等...)Android佈局 - 如何根據屏幕尺寸創建動態桌面佈局?

然後使用片段根據屏幕大小進行排列?

但我不認爲是好的嗎?因爲那時我們需要決定我需要在一個佈局中放置多少行。

實現它的最佳方法是什麼?

查看片劑: ​​

查看在電話: enter image description here

回答

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),並把他們在資源文件夾爲不同的屏幕尺寸&方向。 (例如佈局& layout-land)。

在你的片段onCreate()中,然後膨脹佈局和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具有相同的機器人:ID在這兩個佈局,你的代碼可以把他們相同的,無論其佈局被加載。

+0

非常感謝。你的建議很好的解決了我的問題,因爲起初我也認爲如果使用單獨的片段,那麼代碼的維護將會令人頭疼。 – guaz 2014-09-01 08:11:53