Android 开发错题本

一 设置标题栏 和 状态栏相同背景色.

// 设置状态栏和标题栏. 使用上面的增加和一个View
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
// 找到自定义的状态栏.
LinearLayout layout_title = (LinearLayout) findViewById(R.id.ll_title_layout);
// 计算高度.
int statusH = FunctionTools.getStatusBarHeight(this.getApplicationContext());
int titleH = layout_title.getLayoutParams().height;
// 设置高度. 返回的是像素. 
layout_title.getLayoutParams().height = titleH + statusH;

获取状态栏高度

/**
     * 获取高度.
     * @param context
     * @return
     */
    public static int getStatusBarHeight(Context context){
        int statusHeight = -1;
        try {
            Class clazz = Class.forName("com.android.internal.R$dimen");
            Object object = clazz.newInstance();
            int height = Integer.parseInt(clazz.getField("status_bar_height").get(object).toString());
            statusHeight = context.getResources().getDimensionPixelSize(height);
        } catch (Exception e){
            e.printStackTrace();
        }
        return statusHeight;
    }

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:background="#FFDEAD"
              android:id="@+id/ll_title_layout"
              android:layout_width="match_parent"
              android:layout_height="50dp">
    <TextView
        android:layout_width="match_parent"
        android:id="@+id/tv_status_bar_tv"
        android:layout_weight="1"
        android:layout_height="0dp"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <Button
            android:id="@+id/btn_titlebar_qr_code"
            style="@style/btn_titlebar_style"
            android:text="二维码"
            />
        <TextView
            android:id="@+id/tv_titlebar"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textAlignment="center"
            android:paddingTop="10dp"
            android:textSize="20sp"
            android:text="标题"
            android:layout_height="match_parent"/>
        <Button
            android:id="@+id/btn_titlebar_setting"
            style="@style/btn_titlebar_style"
            android:text="设置"/>

    </LinearLayout>


</LinearLayout>

二 , 隐藏标题栏 和 状态栏

(修改主题Style)

隐藏标题栏

<item name="windowNoTitle">true</item>

隐藏状态栏(全屏)

<item name="android:windowFullscreen">true</item>

三 , 取消ListView 子控件的点击事件.

// 通常我们用到的是第三种,即在Item布局的根布局加上下面属性.
android:descendantFocusability=”blocksDescendants”

属性解析

// viewgroup会优先其子类控件而获取到焦点
beforeDescendant
// viewgroup只有当其子类控件不需要获取焦点时才获取焦点
afterDescendant
// viewgroup会覆盖子类控件而直接获得焦点
blocksDescendants

如果出现CheckBox无法屏蔽的现象

// 可以自定义CheckBox 然后重写他的onTouchEvent() 方法
// 返回false 说明不处理点击事件.
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return false;
    }

popupWindow 点击其他区域自动消失

// 设置为wrap_content
View contentView = LayoutInflater.from(getActivity()).inflate(R.layout.pw_conf_mode,null);
mConfModePW = new PopupWindow(contentView,WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.WRAP_CONTENT,true);
// TODO : 不设置此属性. 无法消失.
mConfModePW.setBackgroundDrawable(new BitmapDrawable());

推荐阅读更多精彩内容