Android设置系统UI可见性
来源:互联网 发布:刘梓晨直播软件 编辑:程序博客网 时间:2024/05/29 15:18
/** * Activity演示了使用系统用户界面UI来实现内容浏览器风格的用户界面(如阅读器界面)。 * * @description: * @author ldm * @date 2016-5-24 下午4:03:51 */@SuppressWarnings("deprecation")public class ContentBrowserActivity extends Activity implements OnQueryTextListener, ActionBar.TabListener { private Content mContent; /** * 自定义ScrollView,管理系统UI * * @description:View.OnSystemUiVisibilityChangeListener注册监听器来监听系统UI可见性的变化 * @author ldm * @date 2016-5-24 下午3:43:21 */ public static class Content extends ScrollView implements View.OnSystemUiVisibilityChangeListener, View.OnClickListener { private TextView mText; private TextView mTitleView; private SeekBar mSeekView; // SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住。 int mBaseSystemUiVisibility = SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | SYSTEM_UI_FLAG_LAYOUT_STABLE;// SYSTEM_UI_FLAG_LAYOUT_STABLE:防止系统栏隐藏时内容区域大小发生变化 int mLastSystemUiVis; Runnable mNavHider = new Runnable() { @Override public void run() { setNavVisibility(false); } }; public Content(Context context, AttributeSet attrs) { super(context, attrs); mText = new TextView(context); mText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); mText.setText(context .getString(R.string.alert_dialog_two_buttons2ultra_msg)); mText.setClickable(false); mText.setOnClickListener(this); mText.setTextIsSelectable(true); // 给ScrollView中添加子控件 addView(mText, new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); // 设置系统 UI可见性变化监听 setOnSystemUiVisibilityChangeListener(this); } /** * 初始化标题及SeekBar拖动条 * * @description: * @author ldm * @date 2016-5-24 下午4:00:37 */ public void init(TextView title, SeekBar seek) { mTitleView = title; mSeekView = seek; // 设置状态栏可见 setNavVisibility(true); } @Override public void onSystemUiVisibilityChange(int visibility) { int diff = mLastSystemUiVis ^ visibility; mLastSystemUiVis = visibility; if ((diff & SYSTEM_UI_FLAG_LOW_PROFILE) != 0 && (visibility & SYSTEM_UI_FLAG_LOW_PROFILE) == 0) { // 设置导状态栏可见 setNavVisibility(true); } } // 当窗口中包含的可见的view发生变化时触发。 @Override protected void onWindowVisibilityChanged(int visibility) { super.onWindowVisibilityChanged(visibility); setNavVisibility(true); getHandler().postDelayed(mNavHider, 2000); } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); // 滚动过程中,状态栏隐藏 setNavVisibility(false); } @Override public void onClick(View v) { // 当用户点击 操作时,进行状态栏设置 int curVis = getSystemUiVisibility(); setNavVisibility((curVis & SYSTEM_UI_FLAG_LOW_PROFILE) != 0); } void setBaseSystemUiVisibility(int visibility) { mBaseSystemUiVisibility = visibility; } void setNavVisibility(boolean visible) { int newVis = mBaseSystemUiVisibility; if (!visible) { // SYSTEM_UI_FLAG_LOW_PROFILE:状态栏显示处于低能显示状态(low // profile模式),状态栏上一些图标显示会被隐藏。 // SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏显示,且状态栏被隐藏覆盖掉。 newVis |= SYSTEM_UI_FLAG_LOW_PROFILE | SYSTEM_UI_FLAG_FULLSCREEN; } // 获取状态栏当前可见性 final boolean changed = newVis == getSystemUiVisibility(); if (changed || visible) { Handler h = getHandler(); if (h != null) { h.removeCallbacks(mNavHider); } } // 设置可见性 setSystemUiVisibility(newVis); mTitleView.setVisibility(visible ? VISIBLE : INVISIBLE); mSeekView.setVisibility(visible ? VISIBLE : INVISIBLE); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 标题栏显示在内容上面 getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); setContentView(R.layout.content_browser); mContent = (Content) findViewById(R.id.content); mContent.init((TextView) findViewById(R.id.title), (SeekBar) findViewById(R.id.seekbar)); // 添加Tab ActionBar bar = getActionBar(); bar.addTab(bar.newTab().setText("Tab 1").setTabListener(this)); bar.addTab(bar.newTab().setText("Tab 2").setTabListener(this)); bar.addTab(bar.newTab().setText("Tab 3").setTabListener(this)); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.content_actions, menu); //搜索功能 SearchView searchView = (SearchView) menu.findItem(R.id.action_search) .getActionView(); searchView.setOnQueryTextListener(this); MenuItem actionItem = menu .findItem(R.id.menu_item_share_action_provider_action_bar); ShareActionProvider actionProvider = (ShareActionProvider) actionItem .getActionProvider(); actionProvider .setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME); // 分享操作 Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.setType("image/*"); Uri uri = Uri.fromFile(getFileStreamPath("shared.png")); shareIntent.putExtra(Intent.EXTRA_STREAM, uri); actionProvider.setShareIntent(shareIntent); return true; } @Override public void onAttachedToWindow() { super.onAttachedToWindow(); } @Override protected void onResume() { super.onResume(); } /** * 对菜单项目进行操作 */ @SuppressLint("InlinedApi") @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.show_tabs://显示ActionBar getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); item.setChecked(true); return true; case R.id.hide_tabs://隐藏ActionBar getActionBar() .setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); item.setChecked(true); return true; case R.id.stable_layout://设置状态栏是否保持可见状态 item.setChecked(!item.isChecked()); mContent.setBaseSystemUiVisibility(item.isChecked() ? View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE : View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); return true; } return false; } @Override public boolean onQueryTextChange(String newText) { return true; } @Override public boolean onQueryTextSubmit(String query) { Toast.makeText(this, "Searching for: " + query + "...", Toast.LENGTH_SHORT).show(); return true; } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { }}
主页面布局:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <view android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent" class="com.example.android.apis.view.ContentBrowserActivity$Content" /> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:animateLayoutChanges="true" android:fitsSystemWindows="true" > <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="top|center_horizontal" android:background="#c0ffffff" android:gravity="center" android:padding="16dp" android:text="A title goes here" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#ff000000" /> <SeekBar android:id="@+id/seekbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom|center_horizontal" android:layout_marginBottom="16dp" /> </FrameLayout></FrameLayout>
详细的菜单布局等文件可以参考:
https://github.com/ldm520/ANDROID_API_DEMOS等Android官方API开源代码。
0 0
- Android设置系统UI可见性
- 设置系统栏可见性
- android系统app打开蓝牙+设置可见性
- android imageView 设置可见性
- Android 系统UI状态栏设置
- android-设置蓝牙的可见性
- android 设置按钮的可见性
- Android ImageView设置图片的可见性
- Android ImageView设置图片的可见性
- Android ImageView设置图片的可见性
- 关于android蓝牙可见性设置
- [Android新手学习笔记15]-UI控件可见性
- New UI-设置view的可见与不可见
- [Android] 设置控件是否可见
- Android 设置控件是否可见
- android设置控件不可见
- Android 设置控件是否可见
- 管理系统UI之五:响应UI可见性的变化(Responding to UI Visibility Changes)
- 九度 OJ 1049:字符串去特定字符
- “耳根”发布新作《一念永恒》,交易记录
- 安卓 Data Binding 使用方法总结(姐姐篇)
- Struts2防止表单重复提交
- RecyclerView使用GridLayoutManager间距设置
- Android设置系统UI可见性
- 怎么将ppt转换成word文件格式
- Intellij IDEA15: 带着参数 运行
- Sql Server tempdb原理-启动过程解析实践
- Android wifi无线调试App新玩法ADB WIFI
- 关于Sublime Text 3的常见问题
- 去除inline-block元素间间距,比较靠谱的两种办法
- 主题样式切换代码:jQuery Theme Switcher
- C/C++整理