0

我有一个奇怪的问题。我有一个继承自RelativeLayout. 我膨胀到一个xml。此布局的默认背景图像在 xml 中设置,我尝试在运行时更改它:

if(event.getAction() == MotionEvent.ACTION_DOWN) {
    System.out.println("Action down");
    this.setBackgroundResource(R.drawable.event_cell_selected);
}
else if(event.getAction() == MotionEvent.ACTION_CANCEL) {
    System.out.println("Action down");
    this.setBackgroundResource(R.drawable.event_cell);
}

资源event_cellevent_cell_selected都是 .png 文件。另外,我看到了我的日志。我真的不能说这里发生了什么。

[编辑] 谢谢大家的快速回答。logcat中没有错误,这是我膨胀的xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/event_cell"
android:paddingBottom="@dimen/padding_small"
android:paddingLeft="14dp"
android:paddingRight="14dp"
android:paddingTop="@dimen/padding_large" >

<TextView
    android:id="@+id/textViewMonth"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="juil."
    android:textColor="@color/event_header"
    android:textSize="19dp"
    android:textStyle="bold" />

<TextView
    android:id="@+id/textViewDay"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/textViewMonth"
    android:layout_marginBottom="@dimen/margin_small"
    android:text="TextView"
    android:textColor="@color/event_header"
    android:textSize="15dp" />

<TextView
    android:id="@+id/textViewTitle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:text="TextView"
    android:textColor="@color/event_header"
    android:textSize="17dp" />

<ImageView
    android:id="@+id/imageViewSeparator"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/textViewDay"
    android:layout_marginBottom="@dimen/margin_small"
    android:src="@drawable/event_title_descr_separator" />

<TextView
    android:id="@+id/textViewDescription"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/imageViewSeparator"
    android:ellipsize="end"
    android:maxLines="2"
    android:text="TextView"
    android:textColor="@android:color/black"
    android:textSize="12dp" />

这是我的根 xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/navigationBarView" >

    <LinearLayout
        android:id="@+id/eventsLinearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingLeft="@dimen/margin_small"
        android:paddingRight="@dimen/margin_small" >

    </LinearLayout>
</ScrollView>

膨胀的RelativeLayout被添加到scrollView的linearlayout

[编辑] 好的,为了解决这个问题,我最终以编程方式(而不是通过 xml)设置了我的默认背景图像。这就是诀窍。Android有时真的会有奇怪的行为......

4

2 回答 2

0

向您展示布局 xml 和膨胀代码。我敢打赌,问题如下:在您的 xml 中,您使用的是 RelativeLayout 作为根。这意味着然后膨胀您正在将xml中定义的相对布局添加到代码中创建的相对布局(由您自己的继承自RelativeLayout的类定义)。这意味着在 xml 中定义的背景显示在您在代码中更改的背景之上。尝试<merge>在您的布局根目录中使用而不是<RelativeLayout>

您可以在此处阅读有关“合并”布局标签的信息 http://android-developers.blogspot.com/2009/03/android-layout-tricks-3-optimize-by.html

<merge xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@drawable/event_cell"
    android:paddingBottom="@dimen/padding_small"
    android:paddingLeft="14dp"
    android:paddingRight="14dp"
    android:paddingTop="@dimen/padding_large" >

    <TextView
        android:id="@+id/textViewMonth"
        android:textStyle="bold" />

   .............

</merge>
于 2012-08-17T13:21:40.293 回答
0

我看到的一个问题是System.out.println("Action down");在您的两种情况下都重复。尝试在日志中查找问题时,这可能会导致问题。


另外,你说:

我尝试在运行时更改它,当它被触摸时......

如果您只想在触摸时更改它,请尝试使用 anOnClickListener而不是Touch您正在使用的东西。


另外,您的第二个条件是MotionEvent.ACTION_CANCEL,应该是ACTION_UP吗?

于 2012-08-17T13:24:34.697 回答