2013-09-16 58 views
0

我設計了一個.xml文件,其中使用「dp」定義了元素之間的距離。我認爲這會很好,直到我有一臺新的智能手機,屏幕比我的老屏幕大得多。 在頂部有一個TextView應該使用屏幕的12%,比ScrollView應該使用84%的屏幕,最後4%應該是空的。Android:針對不同屏幕尺寸優化設計

這是.xml文件:

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_weight="0.96" 
android:background="@drawable/hintergrund" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="35dp" 
    android:layout_marginTop="17dp" 
    android:text="Prüfung" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:textColor="#000000" /> 

<ScrollView 
    android:id="@+id/scrollView1" 
    android:layout_width="fill_parent" 
    android:layout_height="437dp" 
    android:layout_marginTop="58dp"> 

<LinearLayout 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" > 
<TextView 
    android:id="@+id/textView5" 
    android:layout_width="293dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:textColor="#000000" 
    android:textSize="16dp" /> 

<TableLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="30dp" 
    android:layout_gravity="center_horizontal" 
    > 
    <TableRow 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     > 
     <TextView 
      android:layout_height="wrap_content" 
      android:text="@string/sf" 
      android:textColor="#000000" /> 
    </TableRow> 
    <TableRow 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     > 
     <Spinner 
      android:id="@+id/spinner1" 
      android:text="@string/sf" 
      android:prompt="@string/sf" 
      android:drawSelectorOnTop="true" 
      /> 
    </TableRow> 
    <TableRow 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     > 
     <TextView 
      android:layout_height="wrap_content" 
      android:text="@string/odf" 
      android:textColor="#000000" /> 
    </TableRow> 
    <TableRow 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     > 
     <Spinner 
      android:id="@+id/spinner2" 
      android:layout_width="237dp" 
      android:text="@string/odf" 
      android:prompt="@string/odf" 
      android:drawSelectorOnTop="true" 
      /> 
    </TableRow> 
    <TableRow 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     > 
     <TextView 
      android:layout_height="wrap_content" 
      android:text="@string/ps" 
      android:textColor="#000000" /> 
    </TableRow> 
    <TableRow 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     > 
     <Spinner 
      android:id="@+id/spinner3" 
      android:text="@string/ps" 
      android:prompt="@string/ps" 
      android:drawSelectorOnTop="true" 
      /> 
    </TableRow> 
</TableLayout> 
<ProgressBar 
    style="@android:style/Widget.ProgressBar.Horizontal" 
    android:layout_width="109dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:layout_marginTop="30dp" 
    android:id="@+id/progressBar1" /> 
<TextView 
    android:id="@+id/textView14" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="#000000" 
    android:layout_gravity="center_horizontal" 
    android:textSize="12sp" /> 

<TableLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="20dp" 
    android:layout_gravity="center_horizontal" 
    > 
    <TableRow 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     > 
     <Button 
      android:id="@+id/btn5" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Vorherige" /> 

     <Button 
      android:id="@+id/btn6" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Nächste" /> 
    </TableRow> 
</TableLayout> 
</LinearLayout> 
</ScrollView> 

</RelativeLayout> 
+0

你讀過嗎? http://developer.android.com/training/multiscreen/index.html – tyczj

+0

是的,但它沒有解決我的問題,因爲這兩個設備使用相同的文件夾。 這是HTC Desire Z和HTC One –

回答

1

我改變了你的RelativeLayout與LinearLayout和我設置weightSum爲LinearLayout爲100.最後一步是分享它的孩子,因爲你想要的:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:weightSum="100" 
android:background="@drawable/hintergrund" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_marginLeft="35dp" 
    android:layout_marginTop="17dp" 
    android:text="Prüfung" 
    android:layout_weight="12" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:textColor="#000000" /> 

<ScrollView 
    android:id="@+id/scrollView1" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
     android:layout_weight="84" 
    android:layout_marginTop="58dp" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/textView5" 
      android:layout_width="293dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:textColor="#000000" 
      android:textSize="16dp" /> 

     <TableLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:layout_marginTop="30dp" > 

      <TableRow 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" > 

       <TextView 
        android:layout_height="wrap_content" 
        android:text="@string/sf" 
        android:textColor="#000000" /> 
      </TableRow> 

      <TableRow 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" > 

       <Spinner 
        android:id="@+id/spinner1" 
        android:drawSelectorOnTop="true" 
        android:prompt="@string/sf" 
        android:text="@string/sf" /> 
      </TableRow> 

      <TableRow 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" > 

       <TextView 
        android:layout_height="wrap_content" 
        android:text="@string/odf" 
        android:textColor="#000000" /> 
      </TableRow> 

      <TableRow 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" > 

       <Spinner 
        android:id="@+id/spinner2" 
        android:layout_width="237dp" 
        android:drawSelectorOnTop="true" 
        android:prompt="@string/odf" 
        android:text="@string/odf" /> 
      </TableRow> 

      <TableRow 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" > 

       <TextView 
        android:layout_height="wrap_content" 
        android:text="@string/ps" 
        android:textColor="#000000" /> 
      </TableRow> 

      <TableRow 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" > 

       <Spinner 
        android:id="@+id/spinner3" 
        android:drawSelectorOnTop="true" 
        android:prompt="@string/ps" 
        android:text="@string/ps" /> 
      </TableRow> 
     </TableLayout> 

     <ProgressBar 
      android:id="@+id/progressBar1" 
      style="@android:style/Widget.ProgressBar.Horizontal" 
      android:layout_width="109dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:layout_marginTop="30dp" /> 

     <TextView 
      android:id="@+id/textView14" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:textColor="#000000" 
      android:textSize="12sp" /> 

     <TableLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:layout_marginTop="20dp" > 

      <TableRow 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" > 

       <Button 
        android:id="@+id/btn5" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Vorherige" /> 

       <Button 
        android:id="@+id/btn6" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Nächste" /> 
      </TableRow> 
     </TableLayout> 
    </LinearLayout> 
</ScrollView> 

+0

非常好! 這是一個很棒的解決方案!非常感謝! 它適用於我:) –

0

使用此的TextView作爲一個例子

<TextView 
android:id="@+id/textView5" 
android:layout_width="293dp" 
android:layout_height="wrap_content" 
android:layout_gravity="center_horizontal" 
android:textColor="#000000" 
android:textSize="16dp" /> 

的問題是你有硬寬度的IE。 android:layout_width="293dp"

相反,它應該讀android:layout_width="match_parent"

然後添加一個保證金的權利或究竟在哪兒:android:layout_marginLeft="20dp"

所以這將會使你的寬度的TextView一路往屏幕的另一邊但縮進右邊緣20dp所以你會看到你想要的空間

+0

寬度不是問題。 問題是,身高。 –

+0

然後做同樣的事情的高度。真正的問題是,你不應該把事物放在絕對位置,而是使用換行和填充內容 – tyczj

+0

但是我怎麼能確定,TextView on Top使用12%的屏幕尺寸,ScrollView 84%和4底部%是空的? –