在xamarin.forms项目中更改android导航栏标题

时间:2017-10-09 01:11:19

标签: android xaml xamarin mobile

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

我不能这样做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>

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

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

我的'MainActivity':

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主题(或后代)。

1 个答案:

答案 0 :(得分:0)

  

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

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

  1. 在Android Styles.xmlResources/values
  2. 中定义

    enter image description here

    您的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. 设置活动主题
    2. 添加自定义样式:

      [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 themeNo 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文件:

      enter image description here

      将您的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>
      

      enter image description here