我今天一直在为Android做一个小应用程序,它是Google高级搜索的界面。它基本上没有图像,所有小部件大小都是wrap_content
或fill_parent
。我没有使用硬编码像素尺寸。它基本上由ScrollView
组成,包括LinearLayout
,其中包含TextViews
和Spinners
的列表(以及最底部的搜索按钮)。
我不知道这是否是一个常见的事情/问题,我今天找不到任何搜索。我没有其他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设备的屏幕截图:
这也是2.2,但是更大的资源。我正在下载一些其他图像以查看3.2 VM中是否正常,我使用的当前图像无法显示小手机视图。
从4.1手机
从4.1 7英寸标签页。
正如我所看到的,问题出在我的设备上:
答案 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)
你对此做过足够的研究吗?
您尝试了什么?在您的代码中,您没有做任何特别的事情来实现这一目标。
在向别人求助之前,请自己提出以上问题并提及 在你的问题中回答,即提到你所尝试的,然后才是 你可以得到别人的关注并得到快速回复。
好吧,让我们来点。
你的问题是
如何让我的应用程序在所有设备中看起来都相同?我是对的。
这里所有设备都意味着,
请仔细阅读以上主题,然后您可以自己做
以下参考文献将帮助您理解这些想法,
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(右)截图:
黑色主题:
Holo主题:
修改强>
如果你只是想摆脱这个小条,你可以以编程方式进行。在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" />