【问题标题】:Changing android nav bar title in xamarin.forms project在 xamarin.forms 项目中更改 android 导航栏标题
【发布时间】:2017-10-09 01:11:19
【问题描述】:

我尝试更改我的 xamarin 表单项目的 android 导航栏标题

我不能这样做 im app.xaml 因为当我在 pcl 中更改颜色时,它也会更改 ios 后退按钮,而且我不想要它...然后我已经尝试过:

<resources>
 <style name="MyTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/MyTheme.ActionBarStyle</item>
</style>

 <style name="MyTheme.ActionBarStyle" 
 parent="@android:style/Widget.Holo.Light.ActionBar">
  <item 
name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
  </style>

  <style name="MyTheme.ActionBar.TitleTextStyle" 
parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textColor">#f08080</item>
 </style>

我读到我需要在清单中添加一些东西,但我没有找到如何做到这一点......

没有错误,没有任何改变......

我的“主要活动”:

namespace neoFly_Montana.Droid
{

[Activity(Label = "neoFly_Montana", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = false, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    public static Context AppContext;
    protected override void OnCreate(Bundle bundle)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(bundle);

        global::Xamarin.Forms.Forms.Init(this, bundle);

        //qrcode inicializa
        ZXing.Net.Mobile.Forms.Android.Platform.Init();

        //inicializa imageCircle
        ImageCircleRenderer.Init();

        //inicializa o mapa
        global::Xamarin.FormsMaps.Init(this, bundle);

        //shared Preferences
        App.Init(new AndroidUserPreferences());

        //Gerenciador de memória
        CachedImageRenderer.Init();

        //AndroidUserPreferences sharedPref = new AndroidUserPreferences();
        //var token = FirebaseInstanceId.Instance.Token;
        //sharedPref.SetString("token", token); joyce descomentar

        LoadApplication(new App());
    }

    // Field, property, and method for Picture Picker
    public static readonly int PickImageId = 1000;

    public TaskCompletionSource<Stream> PickImageTaskCompletionSource { set; get; 
 }

    protected override void OnActivityResult(int requestCode, Result resultCode, Intent intent)
    {
        base.OnActivityResult(requestCode, resultCode, intent);

        if (requestCode == PickImageId)
        {
            if ((resultCode == Result.Ok) && (intent != null))
            {
                Android.Net.Uri uri = intent.Data;
                Stream stream = ContentResolver.OpenInputStream(uri);

                // Set the Stream as the completion of the Task
                PickImageTaskCompletionSource.SetResult(stream);
            }
            else
            {
                PickImageTaskCompletionSource.SetResult(null);
            }
        }
    }

    //qrcode permission
    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
    {
        global::ZXing.Net.Mobile.Forms.Android.PermissionsHandler.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }    

}
}

如果我将主题更改为 MyTheme,则会出现此异常:

未处理的异常:Java.Lang.IllegalStateException:您需要在此活动中使用 Theme.AppCompat 主题(或后代)。

【问题讨论】:

  • 您到底想改变什么?您是否只想更改标题文本颜色,而不更改其他文本颜色?如果您在问题中说明这一点,而不是让我们猜测,那将非常有帮助。
  • 只有标题文字颜色

标签: android xaml xamarin mobile


【解决方案1】:

我尝试更改我的 xamarin 表单项目的 android 导航栏标题

作为Rendy Del Rosario said,将主题设置为MainActivity,在Android Styles.xml 中定义Resources/values,而不是将此样式放在清单中。

  1. 在 Android Resources/values 内部的 Styles.xml 中定义

你的Styles.xml

<resources>
     <style name="MyTheme" parent="@android:style/Theme.Holo.Light">
         <item name="android:actionBarStyle">@style/MyTheme.ActionBarStyle</item>
     </style>

     <style name="MyTheme.ActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar">
         <item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
     </style>

     <style name="MyTheme.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
         <item name="android:textColor">#f08080</item>
     </style>
</resources>
  1. 设置活动主题

添加您的自定义样式:

[Activity (Label = "WorkingWithNavigation.Droid", Theme = "@style/MyTheme",
    Icon = "@drawable/icon", 
    MainLauncher = true, 
    ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
{
    ...
}

效果:

Use theme, No theme.

编辑:

未处理的异常:Java.Lang.IllegalStateException:您需要在此活动中使用 Theme.AppCompat 主题(或后代)。

我阅读了您的 MainActivity 代码,出现此错误是因为您尝试将对话框主题应用到的活动正在扩展 AppCompatActivity,这需要应用 AppCompat 主题。为了解决这个问题并实现你的功能,我找到了另一个解决方案,它在我这边运行良好。

由于您在 MainActivity 中使用工具栏:

ToolbarResource = Resource.Layout.Toolbar;

Android中的导航栏标题是Toolbar,所以只需要更改工具栏标题颜色即可。

1.创建Xamarin.Android项目时使用默认主题:

Resources/values/Styles.xml

<?xml version="1.0" encoding="utf-8" ?>
<resources>

  <style name="ToolbarTheme" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:textColorPrimary">#ff0000</item>
  </style>

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

  <style name="MainTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="colorPrimary">#2196F3</item>
    <item name="colorPrimaryDark">#1976D2</item>
    <item name="colorAccent">#FF4081</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="android:datePickerDialogTheme">@style/AppCompatDialogStyle</item>
  </style>

  <style name="AppCompatDialogStyle" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorAccent">#FF4081</item>
  </style>
</resources>

2.将ToolbarTheme 添加到您的Toolbar

定义一个ToolbarTheme,放到Resources/values/Styles.xml文件中,在上面的代码中可以看到,我这里再写一遍:

 <style name="ToolbarTheme" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:textColorPrimary">#ff0000</item>
 </style>

android:textColorPrimary 是导航栏标题颜色,替换为你要更改的颜色。

找到您的Toolbar.axml 文件:

将您的Toolbar 主题修改为:

android:theme="@style/ToolbarTheme"

完成Toolbar.axml代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:theme="@style/ToolbarTheme"
    android:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

效果:

当我将工具栏标题颜色改为红色时:

<item name="android:textColorPrimary">#ff0000</item>

【讨论】:

  • 对不起,我不明白...你发布的关于样式的第一个代码我知道我应该把它放在资源文件夹内的 style.xml 中......但是当你说“添加您的自定义样式”我不知道我把这段代码放在哪里
  • @Joyce de Lanna,将其作为Attribute 放入您的MainActivity
  • @Joyce de Lanna,我已经更新了我的答案,请查看。
  • 谢谢,如果我把它放在 mainActivity 中,其他活动(pcl 的页面)也会收到它吗?
  • 未处理异常:Java.Lang.IllegalStateException:您需要在此活动中使用 Theme.AppCompat 主题(或后代)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
  • 2020-04-29
  • 2015-12-24
  • 2012-12-17
相关资源
最近更新 更多