2

私は今日、Google Advanced Search へのインターフェイスである Android 用の小さなアプリを作成しています。基本的に画像はなく、すべてのウィジェットのサイズはwrap_contentまたはfill_parentです。ハードコーディングされたピクセル寸法は使用していません。基本的に、 と のリストを含む を含む で構成されます(ScrollViewおよび最下部にある検索ボタン)。LinearLayoutTextViewsSpinners

これが一般的なこと/質問かどうかはわかりませんが、今日検索しても何も見つかりませんでした。私はGalaxy tab 8.9インチタブ以外のAndroidデバイスを持っていません。次は、マニフェスト xml ファイルのスタイリングに関連する唯一のものです。

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

アプリをどのデバイスでも同じように表示したいと考えています。固定された寸法はありません。どうすればこれを修正できますか?

ソース コードは github にあります。

Android 2.2 デバイスのスクリーンショットを次に示します。

アンドロイド 2.2

これも 2.2 からですが、解像度が大きくなっています。他のイメージをダウンロードして、3.2 VM で問題ないかどうかを確認しています。現在使用しているイメージでは、小さな電話のビューを表示できません。

より大きな解像度での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>

drawable/bg_border

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

drawable/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

アプリケーションのテーマを に変更します@android:style/Theme.Black.NoTitle。これにより、異なる OS バージョン間でプレゼンテーションが同じに保たれます。

また、マニフェストで最小およびターゲット SDK を設定してみてください。

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

あなたが見ている違いは、テーマに関連しています。デバイスに表示される TextField は Holo テーマを使用していますが、他のスクリーンショットのものは Holo テーマを使用していません。

すべてのデバイスでホロ テーマを使用する場合は、ここで1 つの解決策を示します。(私はテストしませんでしたが、これはあなたが望むものではないと思います)

一方、あなたの目標がそのホロテーマを取り除くことである場合は、別のテーマ、たとえば黒を使用できます. マニフェストのテーマ定義を次のように置き換えるだけです。

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

そして、あなたは大丈夫なはずです!

編集

クイック編集: これをコンパイルするために 4.1 を使用しています。どのバージョンを使用していますか? 4.1で試してみてください。

あなたの問題は間違いなくテーマに関連しています。以下に投稿したこのコードを試してみてください。これがお使いのデバイスで機能しない場合、2 つの理由が考えられます。1 つは、公式の Android を使用していないことです。デバイスに Cyanogen のようなカスタム rom がある場合、それがテーマを上書きしている可能性があります。2 つ目は、アクティビティの設定を上書きする設定がデバイスに設定されていることです。これは非常にありそうもないことであり、これまで聞いたこともありませんが、何が起こっているのかを知っているさまざまなメーカーの非常に多くの異なる OS を使用すれば、可能かもしれません。

本当に github に置く必要はありません。非常に単純なコードなので、スクリーンショットと共にここに置きます。

私のマニフェスト設定の 2 つのテーマ:

    <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 メソッドと BEFORE setContentView で次を使用します。

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

これにより、タイトルバーが取り除かれ、アプリが全画面表示に設定され、テーマが混乱しなくなります。

于 2012-10-24T15:27:55.690 に答える