3

我是新开发的android开发。我上个月在Udacity参加了一个begginer课程。我在正确定位布局时遇到麻烦,因为总是有些东西不显示在屏幕上,在不同的设备上它看起来不同,尽管我根本没有使用特定的尺寸。对于我的tic-tac-toe游戏,我使用九个字段的十字和圆圈按钮。我已经尝试了几乎所有这些布局,我需要你的帮助,因为我必须在7月11日前准备好该项目。谢谢。这是整个代码,因为我认为这个问题不能以其他方式解决。针对tic tac toe app的故障定位布局 - 脱落屏幕

this is how it is displayed on the screen of Google Nexus S 4.1.1 API 16 480x800, 240dpi

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:theme="@style/PurpleTheme" 
    android:background="@drawable/background_1a" 
    tools:context="com.example.android.tictactoe.MainActivity" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:weightSum="7"> 

<LinearLayout 
    android:id="@+id/general_layout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:orientation="vertical" 
    android:weightSum="6"> 

    <ImageView 
     android:id="@+id/logo" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:layout_margin="5dp" 
     android:src="@drawable/logo_white"/> 

    <!-- UP--> 
    <LinearLayout 
     android:layout_gravity="center" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="3" 
     android:weightSum="3" 
     android:orientation="vertical" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="horizontal" 
      android:layout_weight="1" 
      android:weightSum="3"> 

      <Button 
       android:id="@+id/top_left_btn" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_margin="1dp" 
       android:layout_marginBottom="1dp" 
       android:layout_marginLeft="1dp" 
       android:layout_marginRight="1dp" 
       android:layout_marginTop="1dp" 
       android:enabled="true" 
       android:textColor="#5d178f" 
       android:textColorHighlight="#f1c918" 
       android:textSize="64sp" 
       android:layout_weight="1" /> 

      <Button 
       android:id="@+id/top_centre_btn" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_margin="1dp" 
       android:layout_marginBottom="1dp" 
       android:layout_marginLeft="1dp" 
       android:layout_marginRight="1dp" 
       android:layout_marginTop="1dp" 
       android:enabled="true" 
       android:textColor="#5d178f" 
       android:textColorHighlight="#f1c918" 
       android:textSize="64sp" 
       android:layout_weight="1" /> 

      <Button 
       android:id="@+id/top_right_btn" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_margin="1dp" 
       android:layout_marginBottom="1dp" 
       android:layout_marginLeft="1dp" 
       android:layout_marginRight="1dp" 
       android:layout_marginTop="1dp" 
       android:enabled="true" 
       android:textColor="#5d178f" 
       android:textColorHighlight="#f1c918" 
       android:textSize="64sp" 
       android:layout_weight="1" /> 

     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="horizontal" 
      android:layout_weight="1" 
      android:weightSum="3"> 

      <Button 
       android:id="@+id/middle_left_btn" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_margin="1dp" 
       android:layout_marginBottom="1dp" 
       android:layout_marginLeft="1dp" 
       android:layout_marginRight="1dp" 
       android:layout_marginTop="1dp" 
       android:enabled="true" 
       android:textColor="#5d178f" 
       android:textColorHighlight="#f1c918" 
       android:textSize="64sp" 
       android:layout_weight="1" /> 

      <Button 
       android:id="@+id/middle_centre_btn" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_margin="1dp" 
       android:layout_marginBottom="1dp" 
       android:layout_marginLeft="1dp" 
       android:layout_marginRight="1dp" 
       android:layout_marginTop="1dp" 
       android:enabled="true" 
       android:textColor="#5d178f" 
       android:textColorHighlight="#f1c918" 
       android:textSize="64sp" 
       android:layout_weight="1" /> 

      <Button 
       android:id="@+id/middle_right_btn" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_margin="1dp" 
       android:layout_marginBottom="1dp" 
       android:layout_marginLeft="1dp" 
       android:layout_marginRight="1dp" 
       android:layout_marginTop="1dp" 
       android:enabled="true" 
       android:textColor="#5d178f" 
       android:textColorHighlight="#f1c918" 
       android:textSize="64sp" 
       android:layout_weight="1" /> 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="horizontal" 
      android:layout_weight="1" 
      android:weightSum="3"> 

      <Button 
       android:id="@+id/bottom_left_btn" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_margin="1dp" 
       android:layout_marginBottom="1dp" 
       android:layout_marginLeft="1dp" 
       android:layout_marginRight="1dp" 
       android:layout_marginTop="1dp" 
       android:enabled="true" 
       android:textColor="#5d178f" 
       android:textColorHighlight="#f1c918" 
       android:textSize="64sp" 
       android:layout_weight="1" /> 

      <Button 
       android:id="@+id/bottom_centre_btn" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_margin="1dp" 
       android:layout_marginBottom="1dp" 
       android:layout_marginLeft="1dp" 
       android:layout_marginRight="1dp" 
       android:layout_marginTop="1dp" 
       android:enabled="true" 
       android:textColor="#5d178f" 
       android:textColorHighlight="#f1c918" 
       android:textSize="64sp" 
       android:layout_weight="1" /> 

      <Button 
       android:id="@+id/bottom_right_btn" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_margin="1dp" 
       android:layout_marginBottom="1dp" 
       android:layout_marginLeft="1dp" 
       android:layout_marginRight="1dp" 
       android:layout_marginTop="1dp" 
       android:enabled="true" 
       android:textColor="#5d178f" 
       android:textColorHighlight="#f1c918" 
       android:textSize="64sp" 
       android:layout_weight="1" /> 
     </LinearLayout> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="2" 
     android:weightSum="2" 
     android:orientation="horizontal"> 

     <!-- Player X--> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_weight="1"> 

     <EditText 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:textColor="#ffffff" 
       android:gravity="center_horizontal" 
       android:id="@+id/nameOfPlayerX" 
       android:paddingTop="0dp" 
       android:textSize="22sp" 
       android:fontFamily="sans-serif-light" 
       android:textIsSelectable="false" 
       android:hint="Player X" 
       android:textColorHint="#FFFFFF" 
       android:inputType="textFilter" 
       android:maxLength="15" 
       /> 
     <TextView 
      android:id="@+id/player_x_score" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center_horizontal" 
      android:textSize="56sp" 
      android:textColor="#FFFFFF" 
      android:fontFamily="sans-serif-light" 
      android:text="0" /> 

    </LinearLayout> 

     <View 
      android:layout_width="1dp" 
      android:layout_height="match_parent" 
      android:background="@android:color/darker_gray" 
      android:layout_centerInParent="true"/> 

     <!-- Player O--> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:orientation="vertical"> 

      <EditText 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:fontFamily="sans-serif-light" 
       android:gravity="center_horizontal" 
       android:textColor="#ffffff" 
       android:id="@+id/nameOfPlayerO" 
       android:paddingTop="0dp" 
       android:textSize="22sp" 
       android:hint="Player O" 
       android:textColorHint="#FFFFFF" 
       android:inputType="textFilter" 
       android:maxLength="15" 
       /> 
      <TextView 
       android:id="@+id/player_o_score" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:gravity="center_horizontal" 
       android:layout_marginBottom="0dp" 
       android:layout_marginTop="0dp" 
       android:textSize="56sp" 
       android:textColor="#FFFFFF" 
       android:fontFamily="sans-serif-light" 
       android:text="0" /> 

     </LinearLayout> 
    </LinearLayout> 

</LinearLayout> 
    <Button 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_weight="1" 
     android:layout_height="0dp" 
     android:text="Reset Score" 
     android:id="@+id/reset_btn" 
     android:layout_gravity="center_horizontal" 
     android:longClickable="true" 
     android:onClick="reset" 
     android:layout_alignParentBottom="true" 
     /> 
    <!-- not sure about that longClicable --> 
    <!--end of the bottom part for the players' names and score --> 
</RelativeLayout> 

回答

1

如果你想与重量均匀地分布布局,那么你的父母必须是一个的LinearLayout,重量不RelativeLayout的工作。我已经对布局进行了必要的更改,以便它们均匀分布。请仔细看看权重是如何分配的。希望能帮助到你。也可以尝试KDeogharkar的答案,因为嵌套权重对性能不利会更有效。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:theme="@style/PurpleTheme" 
    android:background="@drawable/background_1a" 
    tools:context="com.example.android.tictactoe.MainActivity" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <LinearLayout 
     android:id="@+id/general_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerInParent="true" 
     android:layout_weight="1" 
     android:orientation="vertical" 
     android:weightSum="6"> 

     <ImageView 
      android:id="@+id/logo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:layout_margin="5dp" 
      android:layout_gravity="center" 
      android:src="@drawable/logo_white"/> 

     <!-- UP--> 
     <LinearLayout 
      android:layout_gravity="center" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="3" 
      android:weightSum="3" 
      android:orientation="vertical" 
      android:gravity="center" 
      android:layout_marginLeft="16dp" 
      android:layout_marginRight="16dp"> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="horizontal" 
       android:layout_weight="1" 
       android:weightSum="3"> 

       <Button 
        android:id="@+id/top_left_btn" 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_margin="1dp" 
        android:layout_marginBottom="1dp" 
        android:layout_marginLeft="1dp" 
        android:layout_marginRight="1dp" 
        android:layout_marginTop="1dp" 
        android:enabled="true" 
        android:textColor="#5d178f" 
        android:textColorHighlight="#f1c918" 
        android:textSize="64sp" 
        android:layout_weight="1" /> 

       <Button 
        android:id="@+id/top_centre_btn" 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_margin="1dp" 
        android:layout_marginBottom="1dp" 
        android:layout_marginLeft="1dp" 
        android:layout_marginRight="1dp" 
        android:layout_marginTop="1dp" 
        android:enabled="true" 
        android:textColor="#5d178f" 
        android:textColorHighlight="#f1c918" 
        android:textSize="64sp" 
        android:layout_weight="1" /> 

       <Button 
        android:id="@+id/top_right_btn" 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_margin="1dp" 
        android:layout_marginBottom="1dp" 
        android:layout_marginLeft="1dp" 
        android:layout_marginRight="1dp" 
        android:layout_marginTop="1dp" 
        android:enabled="true" 
        android:textColor="#5d178f" 
        android:textColorHighlight="#f1c918" 
        android:textSize="64sp" 
        android:layout_weight="1" /> 

      </LinearLayout> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="horizontal" 
       android:layout_weight="1" 
       android:weightSum="3"> 

       <Button 
        android:id="@+id/middle_left_btn" 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_margin="1dp" 
        android:layout_marginBottom="1dp" 
        android:layout_marginLeft="1dp" 
        android:layout_marginRight="1dp" 
        android:layout_marginTop="1dp" 
        android:enabled="true" 
        android:textColor="#5d178f" 
        android:textColorHighlight="#f1c918" 
        android:textSize="64sp" 
        android:layout_weight="1" /> 

       <Button 
        android:id="@+id/middle_centre_btn" 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_margin="1dp" 
        android:layout_marginBottom="1dp" 
        android:layout_marginLeft="1dp" 
        android:layout_marginRight="1dp" 
        android:layout_marginTop="1dp" 
        android:enabled="true" 
        android:textColor="#5d178f" 
        android:textColorHighlight="#f1c918" 
        android:textSize="64sp" 
        android:layout_weight="1" /> 

       <Button 
        android:id="@+id/middle_right_btn" 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_margin="1dp" 
        android:layout_marginBottom="1dp" 
        android:layout_marginLeft="1dp" 
        android:layout_marginRight="1dp" 
        android:layout_marginTop="1dp" 
        android:enabled="true" 
        android:textColor="#5d178f" 
        android:textColorHighlight="#f1c918" 
        android:textSize="64sp" 
        android:layout_weight="1" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="horizontal" 
       android:layout_weight="1" 
       android:weightSum="3"> 

       <Button 
        android:id="@+id/bottom_left_btn" 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_margin="1dp" 
        android:layout_marginBottom="1dp" 
        android:layout_marginLeft="1dp" 
        android:layout_marginRight="1dp" 
        android:layout_marginTop="1dp" 
        android:enabled="true" 
        android:textColor="#5d178f" 
        android:textColorHighlight="#f1c918" 
        android:textSize="64sp" 
        android:layout_weight="1" /> 

       <Button 
        android:id="@+id/bottom_centre_btn" 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_margin="1dp" 
        android:layout_marginBottom="1dp" 
        android:layout_marginLeft="1dp" 
        android:layout_marginRight="1dp" 
        android:layout_marginTop="1dp" 
        android:enabled="true" 
        android:textColor="#5d178f" 
        android:textColorHighlight="#f1c918" 
        android:textSize="64sp" 
        android:layout_weight="1" /> 

       <Button 
        android:id="@+id/bottom_right_btn" 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_margin="1dp" 
        android:layout_marginBottom="1dp" 
        android:layout_marginLeft="1dp" 
        android:layout_marginRight="1dp" 
        android:layout_marginTop="1dp" 
        android:enabled="true" 
        android:textColor="#5d178f" 
        android:textColorHighlight="#f1c918" 
        android:textSize="64sp" 
        android:layout_weight="1" /> 
      </LinearLayout> 

     </LinearLayout> 



    </LinearLayout> 
    <LinearLayout 
     android:id="@+id/players_scoreboard" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:weightSum="2" 
     android:layout_above="@+id/reset_btn" 
     android:orientation="horizontal"> 

     <!-- Player X--> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:layout_weight="1"> 

      <EditText 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:textColor="#ffffff" 
       android:gravity="center_horizontal" 
       android:id="@+id/nameOfPlayerX" 
       android:paddingTop="0dp" 
       android:textSize="22sp" 
       android:fontFamily="sans-serif-light" 
       android:textIsSelectable="false" 
       android:hint="Player X" 
       android:textColorHint="#FFFFFF" 
       android:inputType="textFilter" 
       android:maxLength="15" 
       /> 
      <TextView 
       android:id="@+id/player_x_score" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:gravity="center_horizontal" 
       android:textSize="56sp" 
       android:textColor="#FFFFFF" 
       android:fontFamily="sans-serif-light" 
       android:text="0" /> 

     </LinearLayout> 

     <View 
      android:layout_width="1dp" 
      android:layout_height="match_parent" 
      android:background="@android:color/darker_gray" 
      android:layout_centerInParent="true"/> 

     <!-- Player O--> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:orientation="vertical"> 

      <EditText 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:fontFamily="sans-serif-light" 
       android:gravity="center_horizontal" 
       android:textColor="#ffffff" 
       android:id="@+id/nameOfPlayerO" 
       android:paddingTop="0dp" 
       android:textSize="22sp" 
       android:hint="Player O" 
       android:textColorHint="#FFFFFF" 
       android:inputType="textFilter" 
       android:maxLength="15" 
       /> 
      <TextView 
       android:id="@+id/player_o_score" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:gravity="center_horizontal" 
       android:layout_marginBottom="0dp" 
       android:layout_marginTop="0dp" 
       android:textSize="56sp" 
       android:textColor="#FFFFFF" 
       android:fontFamily="sans-serif-light" 
       android:text="0" /> 

     </LinearLayout> 

    </LinearLayout> 
    <Button 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_weight="1" 
     android:layout_height="0dp" 
     android:text="Reset Score" 
     android:id="@+id/reset_btn" 
     android:layout_gravity="center" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:longClickable="true" 
     android:onClick="reset" /> 
    <!-- not sure about that longClicable --> 
    <!--end of the bottom part for the players' names and score --> 
</LinearLayout> 
1

使用different dimension xml定义大小,并将其放在值相应的文件夹中。 see

values-sw720dp   10.1” tablet 1280x800 mdpi 

values-sw600dp   7.0” tablet 1024x600 mdpi 

values-sw480dp   5.4” 480x854 mdpi 
values-sw480dp   5.1” 480x800 mdpi 

values-xhdpi   4.7” 1280x720 xhdpi 
values-xhdpi   4.65” 720x1280 xhdpi 

values-hdpi    4.0” 480x800 hdpi 
values-hdpi    3.7” 480x854 hdpi 

values-mdpi    3.2” 320x480 mdpi 

values-ldpi    3.4” 240x432 ldpi 
values-ldpi    3.3” 240x400 ldpi 
values-ldpi    2.7” 240x320 ldpi 

添加dimens.xml不同的价值

例如

<!-- phones --> 
    <dimen name="title_size">24sp</dimen> 
    <dimen name="button_width">64dp</dimen> 

<!-- small tablets --> 
    <dimen name="title_size">32sp</dimen> 
    <dimen name="button_width">80dp</dimen> 

<!-- big tablets --> 
    <dimen name="title_size">48sp</dimen> 
    <dimen name="button_width">128dp</dimen> 

和最后一件事,你可以做的就是添加滚动视图作为父母,所以你至少会确保用户滚动视图,如果在某些设备中显示您的视图部分

希望这将有助于