2

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

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

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

我想让我的应用在任何设备上看起来都一样。它没有固定的尺寸,不就是这样吗?我怎样才能解决这个问题?

源代码在github上,如果有人想看

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

安卓 2.2

这也是从 2.2 开始的,但分辨率更高。我正在下载其他一些图像,看看在 3.2 虚拟机中是否可以,我使用的当前图像无法显示小手机视图。

android 2.2 分辨率更高

从 4.1 手机

4.1电话

从 4.1 7 英寸标签。

从 4.1 7 英寸标签

如我所见,问题仅出在我的设备上:

在此处输入图像描述

4

4 回答 4

1

好的,如果我没记错,您正在谈论不同 android 版本中的 EditText 外观
如果是,这里是解决方案使用您的所有 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>

根据您的选择使用边框颜色并代替可绘制的形状,您也可以使用9个补丁图像

于 2012-10-19T05:52:14.903 回答
1

您对此进行了足够的研究吗?

你试过什么?在您的代码中,您没有做任何特别的事情来实现这一点。

在向他人寻求帮助之前,请自己提出上述问题并在问题中提及该答案,即提及您尝试过的内容,然后才能引起他人的注意并得到快速答复。

好的,让我们开始吧。

你的问题是

如何让我的应用程序在所有设备上看起来都一样?我对吗。

这里所有的设备意味着,

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

所以请通过上述主题然后你可以自己做

以下参考资料将帮助您理解这些想法,

支持多屏

支持不同的屏幕

支持不同平台版本

您可以从android 示例中获取示例

经历那个,尝试一些事情,然后问你的疑问..

于 2012-10-24T06:33:56.163 回答
0

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

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

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

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

你应该没事!

编辑

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

您的问题绝对与主题相关。试试我在下面发布的这段代码,如果这在您的设备上不起作用,我可以想到两个原因。一是您没有使用官方的Android。如果您的设备中有一些自定义 rom,例如 Cyanogen,可能会覆盖您的主题。其次,您在设备中设置了一些首选项,该首选项覆盖了您活动中的首选项。我发现这真的不太可能,我以前从未听说过它,但它可能是可能的,因为来自不同制造商的许多不同的操作系统都知道发生了什么。

真的不用放到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(右)使用全息和黑色主题的截图:

黑色主题: 黑色主题

全息主题: 在此处输入图像描述

编辑

如果您只是想摆脱标题栏,您可以以编程方式进行。在您的 onCreate 方法和 setContentView 之前使用以下内容:

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

这将摆脱标题栏,将应用程序设置为全屏并且不会弄乱主题。

于 2012-10-24T15:27:55.690 回答
0

将您的应用程序主题更改为@android:style/Theme.Black.NoTitle. 这将使不同操作系统版本之间的演示文稿保持相同。

还可以尝试在清单中设置您的 min 和 target SDK:

<uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />
于 2012-10-24T22:14:02.483 回答