0

以下のクラスは、layout-largeフォルダーにあるレイアウトを呼び出すことはありません。これは、以下のmaintabletlayout.xmlファイルです。解像度が800x1280、密度が160のavdを使用しています。以下のfindViewById()は常にnullを返します。何か案は?システムがlayout-largeフォルダーにアクセスするために必要な仕様は何ですか?

public class MainActivity extends Activity
{
 boolean mTwoPane;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    ArrayList<String> subjects=new ArrayList<String>();
    subjects.add("Math");
    subjects.add("Science");
    subjects.add("Art");
    if(findViewById(R.id.top_tablet_container)!=null){
       mTwoPane=true; 
    }else{
        mTwoPane=false;
    }

    if(mTwoPane){
        setContentView(R.layout.maintabletlayout);
        SubjectListFragment top=new SubjectListFragment(subjects,mTwoPane);
        getFragmentManager().beginTransaction().add(R.id.list_container, top).commit();
    }else{

        setContentView(R.layout.mainphonelayout);
        SubjectListFragment top=new SubjectListFragment(subjects,mTwoPane);
        getFragmentManager().beginTransaction().add(R.id.top_phone_container, top).commit();

    }
}
}

mainphonelayout.xml

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

</LinearLayout>

maintabletlayout.xml

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

    >
<RelativeLayout
    android:id="@+id/list_container"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="2"
    android:layout_toLeftOf="@+id/content_container"
  >


</RelativeLayout>

<RelativeLayout
    android:id="@id/content_container"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
   android:layout_weight="1"
    android:layout_toRightOf="@id/content_container"
  >

</RelativeLayout>
</LinearLayout>

マニフェストにはこれもあります

<supports-screens
   android:xlargeScreens="true"
   android:largeScreens="true"
   android:normalScreens="true"
   android:anyDensity="true" />

@nOiAdは正解でした。両方のレイアウトに同じ名前を付けてから、その名前でsetContentView()を指定する必要がありました。このようにして、適切なサイズの画面にコンテンツビューを設定すると、大画面レイアウトでIDを検索しようとしたときに、findViewById()がnull以外を返すことができます。

 public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.main);


        ArrayList<String> subjects=new ArrayList<String>();
        subjects.add("Math");
        subjects.add("Science");
        subjects.add("Art");
        if(findViewById(R.id.top_tablet_container)!=null){
           mTwoPane=true; 
        }else{
            mTwoPane=false;
        }

        if(mTwoPane){

            SubjectListFragment top=new SubjectListFragment(subjects,mTwoPane);
            getFragmentManager().beginTransaction().add(R.id.list_container, top).commit();
        }else{


            SubjectListFragment top=new SubjectListFragment(subjects,mTwoPane);
            getFragmentManager().beginTransaction().add(R.id.top_phone_container, top).commit();

        }
    }
4

3 に答える 3

0

Android 3.2以降ではlayout-swXXXdp、表記を使用する必要があります。ここで、XXXは数値です。あなたの場合は720、10インチの画面である必要があります

于 2013-01-12T09:24:10.357 に答える
0

実行しているエミュレーターが実際に「大規模」に構成されていることを確認してください。解像度の範囲は、サイズ「バケット」(通常/大/ ...)には自動的に適用されません。 エミュレーター

于 2013-01-12T09:29:12.467 に答える
0

@nOiAdは正解でした。両方のレイアウトに同じ名前を付けてから、その名前でsetContentView()を指定する必要がありました。このようにして、適切なサイズの画面にコンテンツビューを設定すると、大画面レイアウトでIDを検索しようとしたときに、findViewById()がnull以外を返すことができます。

 public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.main);


        ArrayList<String> subjects=new ArrayList<String>();
        subjects.add("Math");
        subjects.add("Science");
        subjects.add("Art");
        if(findViewById(R.id.top_tablet_container)!=null){
           mTwoPane=true; 
        }else{
            mTwoPane=false;
        }

        if(mTwoPane){

            SubjectListFragment top=new SubjectListFragment(subjects,mTwoPane);
            getFragmentManager().beginTransaction().add(R.id.list_container, top).commit();
        }else{


            SubjectListFragment top=new SubjectListFragment(subjects,mTwoPane);
            getFragmentManager().beginTransaction().add(R.id.top_phone_container, top).commit();

        }
    }
于 2013-01-12T13:23:04.437 に答える