0

AOSP 4.0.4 の Expanded_status_bar レイアウトには、XML で次のような TextView があります。

<com.android.systemui.statusbar.policy.DateView
    android:id="@+id/date"
    android:textAppearance="@style/TextAppearance.StatusBar.Date"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="4dp"
    android:singleLine="true"
    android:gravity="center"
    android:visibility="visible" />

「frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java」で生成されます

次のように、「frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java」によって膨張します。

ExpandedView expanded = (ExpandedView) View.inflate(context, R.layout.status_bar_expanded, null);
// stuff here
mDateView = (DateView) expanded.findViewById(R.id.date);

別のクラスを介してその可視性を設定したいのですが、ここで読んだいくつかのことを試しましたが、すべてうまくいきませんでした。私が最後に試みたのは、私のクラス(これもsystemuiの一部です)で、次を追加することでした:

TextView mDateView = (TextView) findViewById(R.id.date);
mDateView.setVisibility(View.GONE);

ただし、私のクラスでは mDateView が null であることがわかりました。足りないものはありますか?私は何時間もあちこちを見回して、あちこちで物事を試してきましたが、何もうまくいきません. 私は中級レベルの Java スキルを持っていますが、20 年間の手続き型言語から生まれた OOP のことを今でも理解しようとしています。前もって感謝します。

mDateView の定義を次のように変更しました。

private DateView mDateView;
DateView mDateView = (DateView) findViewById(R.id.date);

しかし、私はまだmDateViewをnullとして取得しています:(

4

2 に答える 2

1

最初、私はあなたの質問を誤解しました。あるクラスにメソッドを追加して、別のクラスを介してそれにアクセスすることができます。

public static void hideDateView() {
        mDateView.setVisibility(View.GONE);
    }

PhoneStatusBar .javaに次のメソッドを追加して、後で呼び出すことができます。

于 2012-06-25T14:43:03.090 に答える
0

私が見ることができる2つの問題があります:

1)ビューを使用するクラスに Context自分の所有者を渡す必要があります。View

がであると仮定すると、ContextActivity使用しますactivity.findViewById(R.id.date)

2)使用findViewById(R.id.date)する場合は、ビューをビュー階層に何らかの方法で追加したことを確認する必要があります(特に指示しない限り、ビューを膨らませてもこれは行われません)。この関数は、膨張したビューを親に追加するかどうかを指定する追加のブール引数を続けるinflate()代わりに、親ビューを渡すことによってこれを行う方法を提供します。null

parentView.addView(expanded)または、既存のインフレートコールの後に言うこともできます。

于 2012-06-25T15:23:01.290 に答える