まず第一に、私がやっていることが正しいか間違っているかを知るために、何かを尋ねたい. 私は車のメディア用のインターフェースを開発しています。これは、Android の在庫を超えているはずです。
fisical ボタンがないので、ナビゲーター、電話、チューナーなどにアクセスできる imagebuttos を備えた、それぞれが片側にある 2 つの境界線で構成される menu_layout を作成しました...
このレイアウト内には、必要なもの (メディア、ナビゲーター、電話など) に対応するレイアウトを動的に追加する FrameLayout があります。
メイン レイアウトは FragmentActivity であり、他の「アクティビティ」をフラグメントとして設定します。
しかし、これを行うと、一部のフレームで機能が失われるため、...
このフラグメントを FragmentActivities として定義できますか? または、コンテナーに動的に設定できるようにするには、フラグメントでなければなりませんか?
1つのフラグメントがPhoneViewであるため、これを尋ねます。このフラグメントには、ダイヤラーとして機能するカスタム Imagebuttons の定義が含まれています。また、この frament は、カスタム ダイヤラーを定義するために必要な editext、imagebuttons などでレイアウトを膨らませます。
しかし、実行すると、次のようになります。
java.lang.ClassCastException: android.widget.Imagebutton
この行で:
button1 = (ImageButton) getActivity().findViewById(R.id.one);
ダイヤラーの最初のボタンを定義するとき。
これは、フラグメントがこの種のリソースでレイアウトを膨らませることができないためですか??
更新 -- コードが追加されました
phone_view.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:baselineAligned="false">
<!-- Layout for the dialer -->
<LinearLayout
android:id="@+id/Right_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:orientation="vertical"
android:layout_marginStart="@dimen/dialpad_horizontal_margin"
android:background="#000000" >
<!-- Text field above the keypad where the digits are displayed -->
<LinearLayout
android:id="@+id/digits_container"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="@integer/dialpad_layout_weight_digits"
android:layout_marginTop="@dimen/dialpad_vertical_margin"
android:gravity="center"
android:background="@drawable/dialpad_background" >
<EditText
android:id="@+id/digits"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="match_parent"
android:gravity="center"
android:scrollHorizontally="true"
android:textAppearance="@style/DialtactsDigitsTextAppearance"
android:focusableInTouchMode="false"
android:nextFocusRight="@+id/deleteButton"
android:background="@android:color/transparent" />
<ImageButton
android:id="@+id/deleteButton"
android:layout_width="56dip"
android:layout_height="50dip"
android:layout_gravity="center_vertical"
android:gravity="center"
android:state_enabled="false"
android:contentDescription="@string/description_delete_button"
android:src="@drawable/ic_dial_action_delete" />
</LinearLayout>
<!-- The dialpad itself -->
<include layout="@layout/dialpad" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/dialpad_vertical_margin"
android:background="#66000000"/>
<FrameLayout
android:id="@+id/dialButtonContainer"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="@integer/dialpad_layout_weight_additional_buttons"
android:layout_gravity="center_horizontal"
android:background="@drawable/dialpad_background">
<ImageButton
android:id="@+id/dialButton"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:state_enabled="false"
android:background="@drawable/btn_call"
android:contentDescription="@string/description_dial_button"
android:src="@drawable/ic_dial_action_call" />
</FrameLayout>
</LinearLayout>
Dialpad.xml
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialpad"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="@integer/dialpad_layout_weight_dialpad"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/dialpad_vertical_margin"
android:paddingStart="5dip"
android:paddingEnd="5dip"
android:paddingBottom="10dip"
android:background="@drawable/dialpad_background"
android:layoutDirection="ltr">
<TableRow
android:layout_height="0px"
android:layout_weight="1" >
<ImageButton
android:id="@+id/one"
style="@style/DialpadButtonStyle"
android:src="@drawable/dial_num_1_no_vm_wht"
android:contentDescription="@string/description_image_button_one" />
<ImageButton
android:id="@+id/two"
style="@style/DialpadButtonStyle"
android:src="@drawable/dial_num_2_wht"
android:contentDescription="@string/description_image_button_two" />
<ImageButton
android:id="@+id/three"
style="@style/DialpadButtonStyle"
android:src="@drawable/dial_num_3_wht"
android:contentDescription="@string/description_image_button_three" />
</TableRow>
<TableRow
android:layout_height="0px"
android:layout_weight="1">
<ImageButton
android:id="@+id/four"
style="@style/DialpadButtonStyle"
android:src="@drawable/dial_num_4_wht"
android:contentDescription="@string/description_image_button_four" />
<ImageButton
android:id="@+id/five"
style="@style/DialpadButtonStyle"
android:src="@drawable/dial_num_5_wht"
android:contentDescription="@string/description_image_button_five" />
<ImageButton
android:id="@+id/six"
style="@style/DialpadButtonStyle"
android:src="@drawable/dial_num_6_wht"
android:contentDescription="@string/description_image_button_six" />
</TableRow>
<TableRow
android:layout_height="0px"
android:layout_weight="1">
<ImageButton
android:id="@+id/seven"
style="@style/DialpadButtonStyle"
android:src="@drawable/dial_num_7_wht"
android:contentDescription="@string/description_image_button_seven" />
<ImageButton
android:id="@+id/eight"
style="@style/DialpadButtonStyle"
android:src="@drawable/dial_num_8_wht"
android:contentDescription="@string/description_image_button_eight" />
<ImageButton
android:id="@+id/nine"
style="@style/DialpadButtonStyle"
android:src="@drawable/dial_num_9_wht"
android:contentDescription="@string/description_image_button_nine" />
</TableRow>
<TableRow
android:layout_height="0px"
android:layout_weight="1">
<ImageButton
android:id="@+id/star"
style="@style/DialpadButtonStyle"
android:src="@drawable/dial_num_star_wht"
android:contentDescription="@string/description_image_button_star" />
<ImageButton
android:id="@+id/zero"
style="@style/DialpadButtonStyle"
android:src="@drawable/dial_num_0_no_plus_wht"
android:contentDescription="@string/description_image_button_zero" />
<ImageButton
android:id="@+id/pound"
style="@style/DialpadButtonStyle"
android:src="@drawable/dial_num_pound_wht"
android:contentDescription="@string/description_image_button_pound" />
</TableRow>
PhoneView.java
public class PhoneView extends Fragment{
...
ImageButton dialBtn;
ImageButton clearBtn;
EditText numTxt;
ImageButton button1;
ImageButton button2;
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mRoot = inflater.inflate(R.layout.phone_view, null);
return mRoot;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setRetainInstance(true);
...
button1 = (Imagebutton) getActivity().findViewById(R.id.one);
...
/**Button1*/
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Set1(v);
}
});
}
public void Set1 (View view) {
numTxt.setText(numTxt.getText()+"1");
}
更新 2 -- LogCat の新しいエラー
.getActivity() を .getVew() に変更した後、LogCat でこれを取得しています。
android.view.InflateException: バイナリ XML ファイルの行 #20: クラスの膨張エラー
この行で:mRoot = inflater.inflate(R.layout.phone_view, null); from the onCreateView()
ほぼ最後に次のように述べています。Caused by: android.content.res.ResourcesNotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x2/d=0x101030e a=2}
at android.view.View.<init>
at android.widget.ImageView.<init>
at android.widget.ImageView.<init>
at android.widget.ImageView.<init>
ImageButton の代わりにダイヤルパッドで Button を使用して同じコードを試したところ、うまくいきました。しかし、Imagebuttons が必要です。
更新 3 --
おそらく、これを実現しているスタイル定義です。何が間違っているのかを確認するには、次のようにします。
<style name="DialpadButtonStyle">
<item name="android:layout_width">0dip</item>
<item name="android:layout_height">match_parent</item>
<item name="android:layout_weight">1</item>
<item name="android:background">?android:attr/selectableItemBackground</item>
<item name="android:soundEffectsEnabled">false</item>
</style>