带有 appcompat 的 Xamarin Android 使我的所有文本变为白色

Posted

技术标签:

【中文标题】带有 appcompat 的 Xamarin Android 使我的所有文本变为白色【英文标题】:Xamarin Android with appcompat makes all my text white 【发布时间】:2016-05-08 20:41:10 【问题描述】:

我正在尝试为我的 Xamarin android 应用了解和实现 Material Theme。我已经阅读了this blog post 和the Android documentation 等资源。但我想我仍然错过了一些重要的东西。

简而言之:我已将父主题设置为“Theme.AppCompat.Light.DarkActionBar”。并且所有文本(textview)都是白色的。而且我想尽可能地遵守 Material Design 指南。

values/styles.xml

  <style name="MyTheme" parent="MyTheme.Base">
  </style>

  <style name="MyTheme.Base" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowNoTitle">true</item>
    <!--We will be using the toolbar so no need to show ActionBar-->
    <item name="android:windowActionBar">false</item>
  </style>

values-v21

  <style name="MyTheme" parent="MyTheme.Base">
    <item name="android:windowContentTransitions">true</item>
    <item name="android:windowAllowEnterTransitionOverlap">true</item>
    <item name="android:windowAllowReturnTransitionOverlap">true</item>
    <item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
    <item name="android:windowSharedElementExitTransition">@android:transition/move</item>
  </style>

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="MaterialDesignTest1.MaterialDesignTest1" android:versionCode="1" android:versionName="1.0">
    <uses-sdk android:targetSdkVersion="22" android:minSdkVersion="21" />
    <application android:label="MaterialDesignTest1"  android:theme="@style/MyTheme"></application>
</manifest>

Mainactivity.cs

[Activity(Label = "MaterialDesignTest1", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : FragmentActivity

    /* Omitted the viewpager & tablayout code */

还有我正在加载到选项卡中的 FilmsFragment.axml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_>
    <TextView
        android:text="Fragment that shows all Starwars Films information 1"
        android:layout_
        android:layout_
        android:layout_margin="30dp" />
</LinearLayout>

结果如附图所示:

当我将父级更改为 parent="@style/Theme.AppCompat.Light"parent="Theme.AppCompat.Light" 时:

将 SDK Target 设置为 23 有点变化,但仍然是白色字体:

什么属性赋予所有字体白色?为什么?

Xamarin:4.0.0.1717

Xamarin Android:6.0.0.35

所有 Xamarin 支持包:23.1.1.0

【问题讨论】:

【参考方案1】:

如果您想为您的应用设置特定颜色,请确保在您的 MyTheme.Base 中添加

   <!-- Main theme colors -->
    <!--   your app branding color for the app bar -->
    <item name="android:colorPrimary">@color/primary</item>
    <!--   darker variant for the status bar and contextual app bars -->
    <item name="android:colorPrimaryDark">@color/primary_dark</item>
    <!--   theme UI controls like checkboxes and text fields -->
    <item name="android:colorAccent">@color/accent</item>

您也应该使用 AppCompatActivity 而不是 FragmentAcitivty。

【讨论】:

以上是关于带有 appcompat 的 Xamarin Android 使我的所有文本变为白色的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Forms 2.0 AppCompat android 键盘模式

Xamarin - 检索项目的父项时出错:找不到与给定名称“Theme.AppCompat.Light.DarkActionBar”匹配的资源

带有 appcompat 库 v7 的 ActionBar(ava.lang.IllegalStateException:您需要使用 Theme.AppCompat 主题)

带有 AppCompat 的 Android Material Design Datepicker

带有下划线 appcompat 的 Android 微调器

带有 Appcompat 的浮动工具栏