LinearLayout没有静态尺寸,8.9英寸平板电脑上没有图像低分辨率

时间:2012-10-16 21:19:46

标签: android android-layout android-linearlayout

我今天一直在为Android做一个小应用程序,它是Google高级搜索的界面。它基本上没有图像,所有小部件大小都是wrap_contentfill_parent。我没有使用硬编码像素尺寸。它基本上由ScrollView组成,包括LinearLayout,其中包含TextViewsSpinners的列表(以及最底部的搜索按钮)。

我不知道这是否是一个常见的事情/问题,我今天找不到任何搜索。我没有其他Android设备而不是Galaxy标签8.9英寸标签。接下来是我唯一与清单xml文件中的样式相关的东西:

     <activity android:name="MainActivity"
          android:theme="@android:style/Theme.NoTitleBar">

我希望我的应用在任何设备上看起来都一样。它没有固定的尺寸,是不是意味着这样呢?我该如何解决这个问题?

The source code is on github, if anyone would want to see

这是Android 2.2设备的屏幕截图:

Android 2.2

这也是2.2,但是更大的资源。我正在下载一些其他图像以查看3.2 VM中是否正常,我使用的当前图像无法显示小手机视图。

android 2.2 at bigger res

从4.1手机

4.1 phone

从4.1 7英寸标签页。

from 4.1 7in tab

正如我所看到的,问题出在我的设备上:

enter image description here

4 个答案:

答案 0 :(得分:1)

好的如果我没有错,你说的是EditText外观&amp;感觉在不同的Android版本中 如果是,这是解决方案 使用自定义背景到您的所有EditText如下

 <EditText
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:background="@drawable/bg_border_statelist" />

创建选择器:drawable / bg_border_statelist

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true"
        android:drawable="@drawable/bg_border_selected" />
    <item android:state_focused="true"
        android:drawable="@drawable/bg_border_selected" />
    <item android:drawable="@drawable/bg_border" />
</selector>

抽拉/ bg_border

<shape android:shape="rectangle">
                    <stroke   
                        android:width="1dp"
                        android:color="#B5B5B5" />                        
                    <solid android:color="#ffffff" />
                    <corners android:radius="0dp" />
                </shape>

抽拉/ bg_border_selected

<shape android:shape="rectangle">
                    <stroke   
                        android:width="1dp"
                        android:color="#FA9D2C" />                        
                    <solid android:color="#ffffff" />
                    <corners android:radius="0dp" />
                </shape>

根据您的选择使用边框颜色&amp;在形状可绘制的位置,您也可以使用9 patch images

答案 1 :(得分:1)

  

你对此做过足够的研究吗?

     

您尝试了什么?在您的代码中,您没有做任何特别的事情来实现这一目标。

     

在向别人求助之前,请自己提出以上问题并提及   在你的问题中回答,即提到你所尝试的,然后才是   你可以得到别人的关注并得到快速回复。

好吧,让我们来点。

你的问题是

如何让我的应用程序在所有设备中看起来都相同?我是对的。

这里所有设备都意味着,

  • 不同的屏幕尺寸
  • 不同密度(屏幕分辨率)
  • 不同的平台版本(例如2.2和4使用自己的默认版本) 主题和风格)

请仔细阅读以上主题,然后您可以自己做

以下参考文献将帮助您理解这些想法,

Supporting Multiple Screens

Supporting Different Screens

Supporting Different Platform Versions

您可以从android samples

获取样本

通过它,尝试一下,然后问你的怀疑......

答案 2 :(得分:0)

您所看到的差异与主题相关。您在设备中看到的TextField正在使用Holo主题,因为其他屏幕截图中没有使用它。

如果您想在每个设备中使用holo主题,则指向一个解决方案here。 (我没有测试,但我猜这不是你想要的)

另一方面,如果你的目标是摆脱那个全息主题,你可以使用另一个主题,例如黑色。只需使用以下内容替换清单中的主题定义:

   <activity android:name="MainActivity"
          android:theme="@android:style/Theme.Black.NoTitleBar">

你应该没事!

修改

快速编辑:我使用4.1来编译它。你使用的是哪个版本?试试4.1。

您的问题与主题相关。试试我在下面发布的这段代码,如果这不适用于您的设备,我可以想到两个原因。一个是你没有使用官方的Android。如果您的设备中有一些像Cyanogen这样的自定义ROM可能会覆盖您的主题。其次,您的设备中有一些优先级设置覆盖了您活动中的优先级。我发现这种情况真的不太可能,而且我之前从未听说过它,但它可能是有可能的,有来自不同制造商的许多不同的操作系统知道发生了什么。

我真的不必把它放在github上,它是如此简单的代码,我会放在这里,截图:

我的清单设置了两个主题:

    <activity
        android:name=".MyActivity"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Black.NoTitleBar" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>     

    <activity
        android:name=".MyActivity2"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen">
    </activity>

我的活动代码,它们是相同的,除了明显意图开始下一个活动

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    super.setContentView(R.layout.edittext);

}

public void ChangeActivity(View v){
    Intent i = new Intent(this, MyActivity.class);    
    startActivity(i);       
}

我可以使用的最简单的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" 
        android:onClick="ChangeActivity"/>

</LinearLayout>

最后,使用全息和黑色主题的Android 3.2(左)和4.1(右)截图:

黑色主题: black theme

Holo主题: enter image description here

修改

如果你只是想摆脱这个小条,你可以以编程方式进行。在onCreate方法和BEFORE setContentView上使用以下内容:

requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);

这将摆脱这一点,将应用程序设置为全屏,不会混淆主题。

答案 3 :(得分:0)

将您的应用主题更改为@android:style/Theme.Black.NoTitle。这将使不同操作系统版本之间的表示保持一致。

还可以尝试在清单中设置min和目标SDK:

<uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />