在Xamarin Android中隐藏系统导航栏

Activity.cs:

using Android.App;
using Android.Graphics;
using Android.OS;
using Android.Support.V4.Content;
using Android.Views;
using Android.Widget;
using Calligraphy;
using Dictionary.Fragments;
using Dictionary.Logic.Translation;
using Newtonsoft.Json;

namespace Dictionary.Activities {

  [Activity( MainLauncher = true )]
  public class MainActivity: Activity {

    protected override void OnCreate( Bundle bundle ) {
      base.OnCreate( bundle );
      SetContentView( Resource.Layout.Main );
      SetToolbar();
      SetStatusBarColor();
      ShowSearchFragment();
    }

    public override void OnWindowFocusChanged( bool hasFocus ) {
      base.OnWindowFocusChanged( hasFocus );

      if ( hasFocus ) {
        var uiOptions =
          SystemUiFlags.HideNavigation |
          SystemUiFlags.LayoutHideNavigation |
          SystemUiFlags.LayoutFullscreen |
          SystemUiFlags.Fullscreen |
          SystemUiFlags.LayoutStable |
          SystemUiFlags.ImmersiveSticky;

        Window.DecorView.SystemUiVisibility = (StatusBarVisibility) uiOptions;
      }
    }

    public override bool OnCreateOptionsMenu( IMenu menu ) {
      MenuInflater.Inflate( Resource.Menu.Toolbar, menu );
      return base.OnCreateOptionsMenu( menu );
    }

    protected override void AttachBaseContext( Android.Content.Context @base ) {
      base.AttachBaseContext( CalligraphyContextWrapper.Wrap( @base ) );
    }

    private void SetStatusBarColor() {
      Window.AddFlags( WindowManagerFlags.DrawsSystemBarBackgrounds );
      Window.SetStatusBarColor( new Color( ContextCompat.GetColor( this, Resource.Color.PrimaryColorDark ) ) );
    }

    private void SetToolbar() {
      var toolbar = FindViewById<Toolbar>( Resource.Id.toolbar );
      SetActionBar( toolbar );
      ActionBar.Title = GetString( Resource.String.AppName );
    }

    private void ShowSearchFragment() {
      var searchFragment = new SearchFragment();
      searchFragment.TranslationSelected += OnTranslationSelected;
      var fragTrans = FragmentManager.BeginTransaction();
      fragTrans.Add( Resource.Id.fragHolder, searchFragment );
      fragTrans.Commit();
    }
  }
}

发现的问题:

此编辑框导致键盘显示,打破了全屏模式,即使键盘消失了,全屏也不会返回。

<EditText android:id="@+id/txtSearch"
                    android:layout_width="match_parent"
                    android:layout_height="48dp"
                    android:background="#FFF"
                    android:gravity="center"
                    android:hint="@string/SearchHint"
                    android:imeOptions="flagNoExtractUi|actionDone"
                    android:inputType="textNoSuggestions"
                    android:singleLine="true"
                    android:textColorHint="#ABABAB"
                    android:textSize="18sp"
                    fontPath="Fonts/amiri-regular.ttf"
                    android:textCursorDrawable="@drawable/cursor"/>

我认为此问题的解决方法是检测键盘是否打开,如果键盘关闭,请再次将视图设置为全屏。

您可以创建一个侦听器来检测键盘是否关闭。 例如:

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);

    // Set our view from the"main" layout resource
    SetContentView(Resource.Layout.Main);

    decorview = Window.DecorView;
    LinearLayout root = FindViewById<LinearLayout>(Resource.Id.rootView);
    screenheight = root.Height;
    root.ViewTreeObserver.AddOnGlobalLayoutListener(new mOnGlobalLayoutListener());
}

public static int screenheight;
public static View decorview;

public class mOnGlobalLayoutListener : Java.Lang.Object, IOnGlobalLayoutListener
{
    public void OnGlobalLayout()
    {
        Rect r = new Rect();
        var keypadHeight = MainActivity.screenheight - r.Bottom;
        if (keypadHeight <= MainActivity.screenheight * 0.15)
        {
            var uiOptions =
                SystemUiFlags.HideNavigation |
                SystemUiFlags.LayoutHideNavigation |
                SystemUiFlags.LayoutFullscreen |
                SystemUiFlags.Fullscreen |
                SystemUiFlags.LayoutStable |
                SystemUiFlags.ImmersiveSticky;

            MainActivity.decorview.SystemUiVisibility = (StatusBarVisibility)uiOptions;
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值