Android Api Demos登顶之路(112)Views-->SystemUiVisibility

/*这个demo演示了如何使用View类提供的setSystemUiVisibility和getSystemUiVisibility方法
 * 动态显示和隐藏状态栏*/
public class MainActivity extends Activity implements OnQueryTextListener {
    private Content mContent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
        setContentView(R.layout.activity_main);
        mContent = (Content) findViewById(R.id.content);
        mContent.init((TextView) findViewById(R.id.texttitle),
                (SeekBar) findViewById(R.id.seekbar));

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.content_action, menu);
        SearchView searchView = (SearchView) menu.findItem(R.id.action_search)
                .getActionView();
        searchView.setOnQueryTextListener(this);

        MenuItem actionProvider = menu.findItem(R.id.shared_provider);
        ShareActionProvider shareProvider = (ShareActionProvider) actionProvider
                .getActionProvider();
        shareProvider
                .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);
        shareProvider.setShareIntent(shareIntent);
        return true;

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.stable_layout) {
            item.setChecked(!item.isChecked());
            int baseSysUiVis = item.isChecked() ? View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    : View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
            mContent.setBaseVisibility(baseSysUiVis);
            return true;
        }
        return false;
    }



    public void onSort(MenuItem item) {
    }

    @Override
    public boolean onQueryTextSubmit(String query) {
        Toast.makeText(this, "Searching for: " + query + "...",
                Toast.LENGTH_SHORT).show();
        return true;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        return true;
    }

    // 自定义一个视图
    public static class Content extends ScrollView implements
            View.OnClickListener, View.OnSystemUiVisibilityChangeListener {
        private TextView mTextView;
        private TextView mTitleView;
        private SeekBar mSeekBar;
        // 导航Tab是否可见
        private boolean mNavVisible;
        // 设置状态栏的初始状态为图层全屏(状态栏被隐藏)和稳定状态(隐藏状态栏,如果ACTION_BAR_OVERLAY is requested,
        // 还会隐藏actionbar)
        private int mBaseSystemUiVisibility = SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | SYSTEM_UI_FLAG_LAYOUT_STABLE;
        private int mLastSystemUiVis;

        Runnable mNaveHide = new Runnable() {
            @Override
            public void run() {
                setNavvisibility(false);
            }
        };

        public Content(Context context, AttributeSet attrs) {
            super(context, attrs);

            mTextView = new TextView(context);
            mTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
            mTextView.setText(context.getString(R.string.text));
            mTextView.setOnClickListener(this);
            mTextView.setTextIsSelectable(true);
            addView(mTextView, new ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT));
            setOnSystemUiVisibilityChangeListener(this);
        }

        public void init(TextView title, SeekBar seekBar) {
            mTitleView = title;
            mSeekBar = seekBar;
            // 初始状态时设置导航界面可见
            setNavvisibility(true);
        }

        @Override
        protected void onWindowVisibilityChanged(int visibility) {
            super.onWindowVisibilityChanged(visibility);
            // 当视图可见时让导航视图显示5秒后退出
            setNavvisibility(true);
            getHandler().postDelayed(mNaveHide, 5000);
        }

        // 滚动时不显示导航栏
        @Override
        protected void onScrollChanged(int l, int t, int oldl, int oldt) {
            super.onScrollChanged(l, t, oldl, oldt);
            setNavvisibility(false);
        }

        protected void setNavvisibility(boolean visibility) {
            // 初始化状态栏的状态
            int newVis = mBaseSystemUiVisibility;
            if (!visibility) {
                // 如果visibility为假,则加入全屏和低能标志位
                newVis |= SYSTEM_UI_FLAG_FULLSCREEN
                        | SYSTEM_UI_FLAG_LOW_PROFILE;
            }
            boolean changed = newVis == getSystemUiVisibility();
            // System.out.println("sys:"+getSystemUiVisibility());

            // 如果状态栏的显示状态为初始状态或者导航栏设置为可见状态
            // 则移除mNaveHide
            if (changed || visibility) {
                Handler h = getHandler();
                if (h != null) {
                    h.removeCallbacks(mNaveHide);
                }
            }

            setSystemUiVisibility(newVis);
            mTitleView.setVisibility(visibility ? VISIBLE : INVISIBLE);
            mSeekBar.setVisibility(visibility ? VISIBLE : INVISIBLE);
        }

        @Override
        public void onClick(View v) {
            int curVis = getSystemUiVisibility();
            boolean visible=(curVis & SYSTEM_UI_FLAG_LOW_PROFILE) != 0;
            setNavvisibility(visible);
        }

        public void setBaseVisibility(int visibility) {
            mBaseSystemUiVisibility = visibility;
        }

        @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);
            }

        }
    }

}

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/root" >

   <view class="com.fishtosky.contentbrowser.MainActivity$Content"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:id="@+id/content" />
   <FrameLayout 
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:fitsSystemWindows="true"
       android:animateLayoutChanges="true">
       <TextView 
           android:id="@+id/texttitle"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:background="#c0ffffff"
           android:textColor="#ff000000"
           android:textAppearance="?android:attr/textAppearanceLarge"
           android:gravity="center"
           android:padding="16dp"
           android:text="A title goes here"
           android:layout_gravity="top|center_horizontal"/>

       <SeekBar 
           android:id="@+id/seekbar"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_gravity="bottom|center_horizontal"
           android:padding="16dp"/>
   </FrameLayout>

</FrameLayout>

content_action.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="Search"
        android:showAsAction="always"
        android:actionViewClass="android.widget.SearchView"/>
    <item android:id="@+id/shared_provider"
        android:title="Shared title"
        android:showAsAction="always"
        android:actionProviderClass="android.widget.ShareActionProvider"/>
    <group 
        android:id="@+id/stable_layout_group"
        android:checkableBehavior="all">
        <item 
            android:id="@+id/stable_layout"
            android:title="Stable Layout"
            android:checked="true"
            android:showAsAction="never"></item>
    </group>
    <item android:id="@+id/shared"
        android:icon="@android:drawable/ic_menu_share"
        android:title="Shared"
        android:showAsAction="ifRoom"/>
    <item android:id="@+id/sort"
        android:icon="@android:drawable/ic_menu_sort_by_size"
        android:title="Sort"
        android:showAsAction="ifRoom">
            <menu >
                <item 
                    android:id="@+id/sort_size"
                    android:icon="@android:drawable/ic_menu_sort_by_size"
                    android:title="Sort By Size"
                    android:onClick="onSort"/>
                <item 
                    android:id="@+id/sort_alpha"
                    android:icon="@android:drawable/ic_menu_sort_alphabetically"
                    android:title="Sort Alpha"
                    android:onClick="onSort"/>
            </menu>
    </item>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值