2018-09-16 08:14:39 com_it 阅读数 5841
  • 快速入门Android开发 视频 教程 android studio

    这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

    19531 人正在学习 去看看 任苹蜻

android修改ToolBar的title文字居中及注意事项

1、先创建一个布局文件title_bar.xml,里面就是标题栏的内容,根据自己需求来调整

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
               android:layout_height="56dp"
                android:background="@color/colorPrimary"
                >
        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/ib_title_back"
            android:src="@drawable/back"
            android:background="@null"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="标题"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true"
            android:textColor="#fff"
            android:textSize="22sp"
            android:id="@+id/tv_title"
            />
</RelativeLayout>

 

2、在需要显示的Activity的布局文件里面导入该布局

3、在Activity中处理标题中的文字

public class RegisterActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        TextView tv_title = (TextView) findViewById(R.id.tv_title);
        tv_title.setText("注册");
        tv_title.setGravity(Gravity.CENTER);
    
    }
}

4、测试结果如下:

参考 https://blog.csdn.net/w690333243/article/details/72875006

2017-01-11 22:09:36 Checkiming 阅读数 1254
  • 快速入门Android开发 视频 教程 android studio

    这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

    19531 人正在学习 去看看 任苹蜻

最近学习有点忙碌,没时间大编写关于技术篇的博客,但就算再没时间也要坚持每月交出6遍的博客,所以咯,今天花点时间写写关于布局—-隐藏标题栏.

初期学习Android开发时,会接触到layout布局的调整,其中在标题栏便可以进行蛮多的操作的,尤其是在Android4.0之后,加入了action bar功能,但有时候呢,我们会觉得屏幕占有的空间有点多,所以想着把标题栏隐藏起来.
隐藏方法很简单,打开你默认的MainActivity,在onCreate()方法中添加如下代码:

这里写图片描述

其中requestWindowFeature(Window.FEATURE_NO_TITLE)的意思就是不在活动中显示标题栏

注意这句代码一定要在setContentView()方法之前执行,不然会报错

这里写图片描述

隐藏之后的效果:
这里写图片描述

2015-03-16 12:18:07 alex19900 阅读数 1437
  • 快速入门Android开发 视频 教程 android studio

    这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

    19531 人正在学习 去看看 任苹蜻

以下为如何修改标签:

1)修改androidmainfest.xml文件中的<application>的标签,
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
把鼠标移到"APP_name"
android:label="@string/app_name"
按住ctrl 点击鼠标左键进入,修改,比如mylove
<string name="app_name">mylove</string>
或添加一行
<string name="app_name">love android</string>
__________________________________________________________________________
或给每个activity指定单独标签,如果没有指定,系统将运行<application/>里面的标签
<activity android:name=".MainActivity"
     android:label="@string/app_name">

以下如何去掉标题的两种方法:

2)在activity中添加setTitle("标题");
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setTitle("标题");
程序最终会选择运行:setTitle("标题");

——————————————————————————————————————
以下为如何修改标题栏:
1)在mainfest activity中添加
<activity android:name=".MainActivity"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"
2)可Java代码设置@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //操作的是windows窗体对象 requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

以下为如何修改状态栏:
在mainfest.xml文件中添加
android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"
在activity中添加
去掉状态栏操作的是WindowManager对象
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);





2017-10-29 23:16:56 YanLiabcd 阅读数 861
  • 快速入门Android开发 视频 教程 android studio

    这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

    19531 人正在学习 去看看 任苹蜻

        github上项目地址https://github.com/604982372/InputConflict.git

       即时通讯的聊天界面表情跟输入法切换的功能困扰了我很久,在网上找各路大神的demo,无奈发现改了个主题或者设置下标题栏颜色,冲突还是出来了。最终决定自己研究一个能够适配各种主题、无论设置标题栏颜色与否都能处理冲突的demo。先来看看效果图(左边的不设置标题栏颜色,右边的图设置标题栏颜色)。

        

1.去除是否设置状态栏干扰因素:android:fitsSystemWindows="true"。

        fitsSystemWindows 是在 android 4.4 中引入的。 System windows 顾名思义就是系统窗口,系统在这里显示系统一些属性和操作区域,比如 最上方的状态栏,以及没有实体按键的最下方的虚拟导航栏。

    大部分的时候,你的应用都不会在状态栏和导航栏下面显示内容,如果你需要在他们下面显示内容,则需要确保你应用的可交互控件(比如按钮)不要显示在系统窗口下面了。 android:fitsSystemWindows=“true” 默认行为就是通过在 View 上设置和系统窗口一样高度的边框(padding )来确保你的内容不会出现到系统窗口下面。使用 fitsSystemWindows 有如下几点需要注意: 

·fitsSystemWindows 按照深度优先的方式其作用,所以使用该属性的 View 的顺序是有要求的,如果第一个 View   使用了 inset (系统窗口的尺寸)则会导致其他 View 尺寸不一样。
·Inset 总是相对于全屏幕的,Inset 可能在 View layout 之前就已经应用了,所以在设置 View 的 padding 之前   View 并不知道其具体相对于系统窗口的位置。
·View 的其他 padding 值被重新改写了,在使用 fitsSystemWindows 为 true 的View 上设置 padding 值(paddingLeft/paddingTop/ 等)是没有效果的。
实际效果: 
当status bar为透明或半透明时(4.4以上),系统会设置view的paddingTop值为一个适合的值(status bar的高度)让view的内容不被上拉到状态栏,当在不占据status bar的情况下(4.4以下)会设置paddingTop值为0(因为没有占据status bar所以不用留出空间)。

提示:如果android:fitsSystemWindows不设置或者设置为false,在4.4手机运行在设置状态栏的情况下将会出现下图有图中的情况

  

2.将覆盖在主题中设置的值,设置除"stateUnspecified"和"adjustUnspecified"以外的值。

各值的含义:
(1)stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
(2)stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
(3)stateHidden:用户选择activity时,软键盘总是被隐藏
(4)stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
(5)stateVisible:软键盘通常是可见的
(6)stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
(7)adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
(8)adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
(9)adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分

3.通过监听键盘打开或关闭来切换表情栏和输入法

private class KeyboardOnGlobalChangeListener implements ViewTreeObserver.OnGlobalLayoutListener {
        int mScreenHeight = 0;
        Rect mRect = new Rect();

        private int getScreenHeight() {
            if (mScreenHeight > 0) {
                return mScreenHeight;
            }
            mScreenHeight = ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE))
                    .getDefaultDisplay().getHeight();
            return mScreenHeight;
        }

        @Override
        public void onGlobalLayout() {
            // 获取当前页面窗口的显示范围
            getWindowVisibleDisplayFrame(mRect);
            int screenHeight = getScreenHeight();
            int keyboardHeight = screenHeight - mRect.bottom; // 输入法的高度
            boolean isActive = false;
            if (Math.abs(keyboardHeight) > screenHeight / 5) {
                isActive = true; // 超过屏幕五分之一则表示弹出了输入法
            }
            mIsKeyboardActive = isActive;
            onKeyboardStateChanged(mIsKeyboardActive, keyboardHeight);
        }
    }
private void onKeyboardStateChanged(boolean isActive, int keyboardHeight) {
        if (isActive) {
            mSwitchBtn.setFocusable(false);
            mSwitchBtn.setFocusableInTouchMode(false);
            mEditText.requestFocus();
            if (mSwitchBtn.isSelected()) { // 表情打开状态下
                mPanelView.setVisibility(View.GONE);
                mSwitchBtn.setSelected(false);
            }
            SPUtils.saveInt(mContext,  COLUMN_NAME, keyboardHeight);
            ViewGroup.LayoutParams params = mPanelView.getLayoutParams();
            if (!(params.height == keyboardHeight)) {
                params.height = keyboardHeight;
                mPanelView.setLayoutParams(params);
            }
        } else {
            if (mSwitchBtn.isSelected()) {
                return;
            }
        }
    }

4.通过设置输入模式和延时隐藏控件来避免闪烁的情况

 if (mSwitchBtn.isSelected()) {
                                mSwitchBtn.setBackgroundResource(R.drawable.icon_key);
                                // 设置为不会调整大小,以便输入弹起时布局不会改变。若不设置此属性,输入法弹起时布局会闪一下
                                ((Activity) mContext).getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
                                mPanelView.setVisibility(View.VISIBLE);
                            } else {
                                mSwitchBtn.setBackgroundResource(R.drawable.icon_more);
                                imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_IMPLICIT_ONLY);
                                mSwitchBtn.postDelayed(new Runnable() {
                                    @Override
                                    public void run() { // 输入法弹出之后,重新调整
                                        mPanelView.setVisibility(View.GONE);
                                        ((Activity) mContext).getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE
                                                | WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
                                    }
                                }, 250); // 延迟一段时间,等待输入法完全弹出*/
                            }

5.使用方式,在布局文件中使用即可:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:id="@+id/activity_chat_ll"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="true"
    android:fitsSystemWindows="true"
    android:orientation="vertical">

    <View
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="@color/colorAccent"
        android:visibility="gone"
    />

    <cn.xiwu.inputconflict.MyView.InputConflictView
        android:id="@+id/keyboard_layout"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="vertical"
        app:editText="@+id/chat_input_et"
        app:listView="@+id/lv_chatting"
        app:panelView="@+id/panel_view"
        app:switchBtn="@+id/add_menu_btn">
        <ListView
            android:id="@+id/lv_chatting"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#eeeeee"
            android:cacheColorHint="#00000000"
            android:divider="@null"
            android:dividerHeight="10px"
            android:listSelector="#00000000"
            android:scrollbarStyle="outsideOverlay"
            android:transcriptMode="normal"/>

        <LinearLayout
            android:id="@+id/input_all_ll"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/white"
            android:minHeight="42dp"
            android:orientation="horizontal"
            android:paddingBottom="6dp"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:paddingTop="6dp"
        >
            <EditText
                android:id="@+id/chat_input_et"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom"
                android:layout_marginLeft="3dp"
                android:layout_marginRight="6dp"
                android:layout_weight="1"
                android:background="@drawable/bg_chat_input"
                android:clickable="true"
                android:hint="请输入短信"
                android:maxLines="3"
                android:minHeight="34dp"
                android:paddingBottom="7dp"
                android:paddingLeft="10dp"
                android:paddingRight="10dp"
                android:paddingTop="7dp"
                android:textColorHint="#cecaca"
                android:textSize="16sp"/>
            <FrameLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent">
                <TextView
                    android:id="@+id/send_msg_tv"
                    android:layout_width="56dp"
                    android:layout_height="34dp"
                    android:layout_centerInParent="true"
                    android:layout_gravity="bottom"
                    android:background="@drawable/bg_chat_shape"
                    android:clickable="true"
                    android:gravity="center"
                    android:text="发送"
                    android:textColor="#fff"
                    android:visibility="gone"/>
                <ImageButton
                    android:id="@+id/add_menu_btn"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginLeft="8dp"
                    android:layout_marginRight="5dp"
                    android:adjustViewBounds="true"
                    android:background="@drawable/icon_more"
                    android:gravity="center"/>
            </FrameLayout>
        </LinearLayout>
        <include
            android:id="@+id/panel_view"
            layout="@layout/panel_view"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:visibility="gone"/>
    </cn.xiwu.inputconflict.MyView.InputConflictView>
</LinearLayout>
  github上项目地址https://github.com/604982372/InputConflict.git



2016-09-26 23:12:28 liuwan1992 阅读数 6524
  • 快速入门Android开发 视频 教程 android studio

    这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

    19531 人正在学习 去看看 任苹蜻

看到标题,很多人会奇怪这是一种什么设计,ListView 不是就可以滑动了嘛,为什么还要 ScrollView 呢,需求总是千

奇百怪的,看看下面这张图:

     

这两张图是一个界面,两个 ListView 嵌套在一个 ScrollView 中,用户可以操作的仅仅是滑动 ScrollView ,而 

ListView 会根据内容自动调整高度,全部显示。

如果只是简单的将 ListView 的高度设为 wrap_content 的话,那么 ListView 并不会根据内容调整高度,而是只显示第

一条数据。

这里提出一种比较简单的解决办法,根据内容测量实际高度,然后在代码中设置 ListView 的高度:

    private void setListViewHeightBasedOnChildren(ListView listView) {
        if (listView == null) {
            return;
        }
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            return;
        }
        int totalHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
    }


但是这里也有一个问题需要注意,使用这种方法,适配器中 getView 方法返回的必须是一个 LinearLayout 布局,因为

measure 在 LinearLayout 中才能正常使用,如果是 RelativeLayout 则显示不正常。

没有更多推荐了,返回首页