Android 2.3中的Button / ToggleButton / EditText布局搞砸了

时间:2013-09-13 04:00:55

标签: android android-layout

我在这样的relativelayout设置中有一个togglebutton。

<RelativeLayout
   android:id="@+id/myBack"
   android:layout_width="fill_parent"
   android:layout_height="906dp"
   android:background="@drawable/main" >

<ToggleButton
     android:id="@+id/toggleButton1"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_marginTop="31dp"
     android:background="@drawable/send_toggleLayout"
     android:checked="true"
     android:text="ToggleButton" />
 </RelativeLayout>

无论如何我可以处理这个,所以2.3和4.2有类似或至少没有像2.3一样搞砸了?我注意到在我的程序中布局应用按钮,togglebuttons和edittexts中发生了这种行为。有什么建议吗?

当此布局应用于按钮/ togglebuttons时,会发生这种情况。这是send_toggleLayout xml文件的样子示例:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

 <item android:state_enabled="true"
        android:state_pressed="true">
    <shape android:padding="10dp" android:shape="rectangle">
        <gradient android:startColor="@color/toggleDark"  android:endColor="@color/toggleLight" android:angle="90"/>
        <stroke android:width="2dp" android:color="#FFFFFF" />
        <corners android:bottomLeftRadius="15dp" android:bottomRightRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp" />
    </shape>
</item>

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

每个通用尺寸和密度涵盖一系列实际屏幕尺寸和密度。例如,两个报告正常屏幕尺寸的设备可能具有实际屏幕尺寸和纵横比,当手动测量时,这些尺寸和纵横比略有不同。类似地,报告屏幕密度为hdpi的两个设备可能具有稍微不同的实际像素密度。 Android将这些差异抽象为应用程序,因此您可以提供针对通用大小和密度设计的UI,并让系统根据需要处理任何最终调整。

访问此以获取更多信息: http://developer.android.com/guide/practices/screens_support.html

您可以将diffenet形状文件用于不同的布局: 并创建半径为2或3的形状文件

<selector xmlns:android="http://schemas.android.com/apk/res/android">

 <item android:state_enabled="true"
        android:state_pressed="true">
    <shape android:padding="10dp" android:shape="rectangle">
        <gradient android:startColor="@color/toggleDark"  android:endColor="@color/toggleLight" android:angle="90"/>
        <stroke android:width="2dp" android:color="#FFFFFF" />
        <corners android:bottomLeftRadius="3dp" android:bottomRightRadius="3dp" android:topLeftRadius="3dp" android:topRightRadius="3dp" />
    </shape>
</item>
</selector>

我改变了角落的半径,使其在2.3上看起来很完美 android设备根据密度知道应该加载哪个布局。 因此,为不同的布局创建不同的形状文件。 使用不同的模拟器来查看输出。

res/layout/my_layout.xml             // layout for normal screen size ("default")
res/layout-small/my_layout.xml       // layout for small screen size
res/layout-large/my_layout.xml       // layout for large screen size
res/layout-xlarge/my_layout.xml      // layout for extra large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

或使用它来了解您正在使用的设备: 执行以下代码:

float scale = getApplicationContext().getResources().getDisplayMetrics().density;

并检查比例值:

0.75 means low density
1.0 means standard (medium) density
1.5 means high (large) density
2.0 means extra high density

答案 1 :(得分:0)

试试这个:

<RelativeLayout
   android:id="@+id/myBack"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
    >
<TextView
     android:id="@+id/txt"
      android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="Turn on/off alerts"
     android:layout_centerVertical="true"
    />
<ToggleButton
   android:layout_alignParentRight="true"
     android:id="@+id/toggleButton1"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:checked="true"
     android:text="ToggleButton" 
     />
 </RelativeLayout>
希望它会有所帮助。