gpt4 book ai didi

Android 自定义通知不显示代码更改

转载 作者:可可西里 更新时间:2023-11-01 19:06:35 25 4
gpt4 key购买 nike

这里有一些奇怪的行为。我有一堆代码、图片,然后是对奇怪行为的一些描述,然后是我的问题。

文件

我有一个文件 random_start_bonus_cards_notification.xml,如下所示:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
android:gravity="center">

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/firstCard" />

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/secondCard" />

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ifNotCoal"
android:visibility="gone">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="("
android:paddingTop="15dp" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/if_not_coal"
android:paddingTop="15dp" />

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/thirdCard" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=")"
android:paddingTop="15dp" />

</LinearLayout>

还有一个文件 random_start_bonus_cards.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"></RelativeLayout>

这是一个故意空白的布局,因为我们会遇到奇怪的事情。事实证明这个文件必须在这里,但它包含什么并不重要。

附上我的styles.xml:

<resources>
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
</style>

<style name="NotificationTitle">
<item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
<item name="android:textStyle">bold</item>
</style>
<style name="NotificationText">
<item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
</style>

还有一些安卓代码:

    private void showStartBonusCardsDialog(DrawnCards drawnCards) {
LayoutInflater factory = LayoutInflater.from(CalculatorActivity.this);
final View dialogContent = factory.inflate(R.layout.random_start_bonus_cards_notification, null);
((ImageView) dialogContent.findViewById(R.id.firstCard)).setImageResource(getDrawableIdForStartCard(drawnCards.firstCard()));
((ImageView) dialogContent.findViewById(R.id.secondCard)).setImageResource(getDrawableIdForStartCard(drawnCards.secondCard()));

if(drawnCards.hasThirdCard()) {
dialogContent.findViewById(R.id.ifNotCoal).setVisibility(View.VISIBLE);
((ImageView) dialogContent.findViewById(R.id.thirdCard)).setImageResource(getDrawableIdForStartCard(drawnCards.thirdCard()));
} else {
dialogContent.findViewById(R.id.ifNotCoal).setVisibility(View.GONE);
}

AlertDialog drawnCardsDialog = new AlertDialog.Builder(CalculatorActivity.this).create();
drawnCardsDialog.setView(dialogContent);
drawnCardsDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); }
});
drawnCardsDialog.show();
}

private void showStartBonusCardsNotification(DrawnCards drawnCards) {
Intent openIntent = new Intent(CalculatorActivity.this, CalculatorActivity.class);
openIntent.setAction(refreshStartCardsAction);
PendingIntent openPendingIntent = PendingIntent.getActivity(this, 0, openIntent, 0);

RemoteViews notificationView = new RemoteViews(getPackageName(), R.layout.random_start_bonus_cards_notification);
notificationView.setImageViewResource(R.id.firstCard, getDrawableIdForStartCard(drawnCards.firstCard()));
notificationView.setImageViewResource(R.id.secondCard, getDrawableIdForStartCard(drawnCards.secondCard()));
if(drawnCards.hasThirdCard()) {
notificationView.setViewVisibility(R.id.ifNotCoal, View.VISIBLE);
notificationView.setImageViewResource(R.id.thirdCard, getDrawableIdForStartCard(drawnCards.thirdCard()));
} else {
notificationView.setViewVisibility(R.id.ifNotCoal, View.GONE);
}

NotificationCompat.Builder notification = new NotificationCompat.Builder(this);
notification.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
notification.setSmallIcon(R.drawable.white);
notification.setContentIntent(openPendingIntent);
notification.setContent(notificationView);

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
int notificationId = 1;
notificationManager.notify(notificationId, notification.build());
}

这里有两个截图供引用: Dialog Notification

怪异

我最初只有一个布局文件,因为布局是相同的。这样,对话框的文本颜色为黑色(好),通知的文本颜色为白色,无法在我的 HTC M9 上阅读。

(1) 如果我将 random_start_bonus_cards_notification.xml 中的 XML 放入 random_start_bonus_cards.xml,并将 random_start_bonus_cards_notification 的所有用法替换为 random_start_bonus_cards,文本颜色错误。如果我保持代码不变,但删除 random_start_bonus_cards,文本颜色是错误的。如果我使用 random_start_bonus_cards_notification.xml 并在项目中保留 random_start_bonus_cards.xml,即使它是空的,我在对话框和通知中都会得到黑色文本!

(2) 通知的背景是淡绿色。这种颜色曾经在资源文件中,但已被删除(如图所示)。删除背景颜色后,对话框布局有一个白色背景,但通知背景仍然是淡绿色,无论我将其更改为红色还是其他颜色。

(3) 如果我停止调用对话代码,同样的行为也会发生。我已经包含了对话框代码,因为我担心这里可能会有一些交互,但我不知道如何交互。

问题

通常,RemoteViews 如何与自定义通知布局一起使用?是否有任何类型的系统缓存可以解释背景颜色不变?

为什么当我更改布局背景颜色时我的通知没有更改背景颜色?

为什么当我删除这个甚至未被使用的空文件 random_start_bonus_cards.xml 时,我的应用会改变行为?

为什么我的通知文本颜色不起作用,除非我使用名为 random_start_bonus_cards_notification.xml 的文件? (如果我删除 _notification,文本会改变颜色)。

感谢阅读!

最佳答案

我的猜测是,这是由于以下两个原因之一而发生的:

  1. 第一个可能是代码中的其他地方,您指的是通知的创建,并且您所做的更改不会影响代码。

  2. 这更有可能发生。构建已崩溃,您构建的应用程序版本未使用最新代码。您可以通过从 IDE 重建应用来解决此问题。

如果您仍然无法理解为什么会发生这种情况,请在调用显示通知的方法之前设置一个断点并遵循应用程序使用的逻辑。

希望这有帮助:)

关于Android 自定义通知不显示代码更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38466101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com