0

AOSP 4.0.4 中的扩展状态栏布局有一个 TextView,在 XML 中看起来像这样

<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 在我的班级中为空。有什么我想念的吗?我一直在寻找几个小时并在这里和那里尝试一些东西,但没有任何效果。我拥有中级 Java 技能,但我仍在努力拥抱来自 20 年过程语言的 OOP 事物。提前致谢。

我将 mDateView 的定义更改为如下所示:

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

但我仍然得到 mDateView 为空:(

4

2 回答 2

1

最初我误解了您的问题,您可以在一个类中添加方法并通过另一个类访问它。

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

您可以在PhoneStatusBar .java中添加以下方法并稍后调用它。

于 2012-06-25T14:43:03.090 回答
0

我可以看到您有两个问题:

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 回答