学习-Android简单ui学习

Android视频课程学习

网址:
https://www.bilibili.com/video/av38409964?from=search&seid=10211011589304053788

android使用gradle构建项目

界面截图

这是manifest里的大概配置

第二章UI组件

2.1布局管理器

主要讲线性布局(LinearLayout)和相对布局(RelativeLayout)

LinearLayout常用属性

android:id   //寻找控件标志
android:layout_width
    matchparent
    warpcontent
    具体数字的单位采用dp
android:layout_height
android:background
android:layout_margin //外边距
android:layout_padding //内边距
android:orientation   //布局方向
android:gravity//用于元素内的居中靠左什么的
android:weight // 用于布局的权重分配 如果width有数字,那么剩余部分按照权重进行分配

RelativeLayout常用属性

android:layout_toLeftOf
android:layout_toRightOf
android:layout_alignBottom
android:layout_alignParentBottom
android:layout_below

布局之间可以相互嵌套

2.2TextView

Text的大小一般用sp

一些特殊属性

android:maxlines
android:text
android:textColor
android:textSize
android:ellipsize //超过显示范围显示...
android:drawableRight
android:drawablePadding

学习过程中遇到了一个问题,就是继承Activity和APPCompactActivity运行的问题,要调整style文件里AppTheme的样式

在java中可以设置下划线和中划线


 myTextView3 = findViewById(R.id.textview3);
        myTextView3.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);//中划线
        myTextView3.getPaint().setAntiAlias(true);//消除锯齿

        myTextView4 = findViewById(R.id.textview4);
        myTextView4.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);//中划线
        myTextView4.getPaint().setAntiAlias(true);//消除锯齿

在java中也可以引入html

setText(。。。

2.3Button

其实是一个textview的子类

可以自定义按钮形状
在drawable文件夹下添加shape形状的东西
填充的话用<solid/>
圆角的话用<corners />
描边的话用<stroke/>

然后在layout的文件里的background设置

xml

<Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="按钮1"
        android:background="@drawable/test_btn1"/>

shape

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#ec973d"/>
    <corners android:radius="5dp" />
</shape>
触摸时变色
在drawable文件夹下添加selector然后设置item再设置shape

有个属性是android:state_pressed="true"//是否被按压

selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <solid android:color="#8ae952"/>
            <corners android:radius="5dp" />
        </shape>
    </item>
    <item android:state_pressed="false">
        <shape>
            <stroke android:color="#8ae952"
                    android:width="3dp"/>
            <corners android:radius="5dp" />
        </shape>
    </item>

</selector>
xml上可以直接onclick设置方法
<Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="按钮5"
        android:layout_marginBottom="10dp"
        android:background="@drawable/test_btn4"
        android:onClick="showToast"
        />

写的对应的java方法


    public void showToast(View view){
        Toast.makeText(this,"这是按钮5",Toast.LENGTH_LONG).show();
    }
java里也可以通过对控件的声明来调用方法
        private Button MyBtn6;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button_view);

        MyBtn6 = findViewById(R.id.btn_view_6);
        MyBtn6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(ButtonViewActivity.this,"这是按钮6",Toast.LENGTH_SHORT).show();
            }
        });
    }

2.4EditText

常用属性
hint:  //提示 
inputType: //可以设置输入密码手机号什么的
    password
    number

ps:textAllCaps="true"是否全部都大写

password.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        Log.d("密码编辑框",s.toString());
    }

    @Override
    public void afterTextChanged(Editable s) {

    }
});

2.5RadioButton

<RadioGroup>
    <RadioButton
        android:checked//默认选中,有这个就必须有id
        android:button="@null"//要换成自定义样式的修改
    />
    <RadioButton/>
    <RadioButton/>
</RadioGroup>

oncheckedchangelistener

2.6CheckBox

如果想实现组的效果放在一个Linear里然后获取子元素级就可以做循环处理了

2.7ImageView

主要是怎么加载网络图片

属性

android:src=""
android:scaleType=""//这是src的缩放类型
    fitxy   //撑满整个空间
    fitcenter//保持宽高比缩放,直至能够完全显示
    centerCrop//保持宽高比缩放,直至完全覆盖整个控件,会有剪裁显示

加载网络图片要在java里做

用第三方的库——glide

上github下载glide

https://github.com/bumptech/glide

gradle里引入

repositories {
  mavenCentral()
  google()
}

dependencies {
  implementation 'com.github.bumptech.glide:glide:4.9.0'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}

使用方法

//单个图片
ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
  Glide.with(this).load("http://goo.gl/gEgYUd").into(imageView);

需要加载声明权限在 manifest里

<user-permission android:name="android.permission.INTERNET">

2.8ListView

(已经不常使用了)

常用属性

<Listview
    select//点击效果属性
    divider//分隔线
/>

listview需要一个adapter

Adapter接口

MyLiistAdapter extends BaseAdapter
getView很重要
写一个构造器传参传context、设置context和layoutinflator
    根据布局写一个静态的方法viewHolder//便于复用效率的提升
    根据id获取元素什么的

要画一个布局

在listView的activity里设置 onItemClickListener

长按事件setOnItemLongClickListener 返回值设置true就是不在执行之后的那些点击事件什么的

2.9GridView

继承AppCompactActivity试一下

属性

android:numColumns="3"//规定有几列
android:horizontalSpacing//水平间距
android:verticalSpacing//垂直间距

写个Activity

然后写一个Adapter也是extends BaseAdapter

2.10 ScrollView

<ScrollView>
    <LinearLayout>
        <Button/>
        <Button/>
        <Button/>
        <Button/>
    </LinearLayout>
</ScrollView>

HorizontalScrollView

<HorizontalScrollView>
    <LinearLayout>
        <Button/>
        <Button/>
        <Button/>
        <Button/>
    </LinearLayout>
</HorizontalScrollView>

2.11 RecyclerView(重点)

实现item多元化,监听事件需要自己实现

设置一个activity

跳转

xml里的控件写RecyclerView

声明

setLayoutManager(new LinearLayoutManager(这个activity类))

setAdapter

写一个Adapter extends Adapter<VH> 
    写个类继承ViewHoldeer(构造方法传View)
    更改传的泛型
    返回值要改,传参要改
        oncreate要改返回值,一个new的 写的类的对象,类名(LayoutInflater.from(mContext).inflate(写好的布局,parent,false)
        补充context变量已及写相应的构造方法
    在ViewHolder里声明控件,找到控件
    
    在onbindViewHolder绑定属性什么的
会Activity里写setAdapter


ItemDecoration
    onDraw//先绘制
    onDrawOver//后绘制
    geItemOffsites//在item周边,分隔线

写个类继承RecyclerView下的ItemDecoration

点击事件
adpter里
    在onbindHoler什么里写itemView的setonclick。。。
    这里的界面写Context就可以了
Activity里
    在Adapter里写接口,要求传入
    就可以在Activity里写东西了
    
    
水平滚动
LinerLayoutManager设置属性
    setOrientation()
网格布局
setLayoutManager的时候new GridLayout(这个类,int 几列)
瀑布流
setLayoutManager的时候new StarggeredGridlayout(int 几列,orientation)
轮子XRecyclerView:addHeadView、addFootView,下拉刷新上拉加载

2.12WebView

加载网页,加载url(网络或者本地assets文件夹下的html文件)

加载html代码

Native和JavaScript相互调用

加载

//加载网络url
webview.loadUrl("http://www.baidu.com");

//加载assets下的html文件
webview.loadUrl(""file:///android_asset/test.html);

//加载html代码
webview.loadData();  //容易出现乱码问题
webview.loadDataWithBaseURL();

网页的前进后退

webview.canGoBack()

webview.goBack()

webview.canGoForward()

webview.goForward()

webview.canGoBackOrForward(int steps)

webview.goBackOrForward(int steps)
    

按下返回键,默认是退出当前的Activity,如果希望是WebView内页面后退需要设置

public boolean onKeyDown(int keyCode,KeyEvent event){
    if((keyCode == KeyEvent.KEYCODE_BACK)&&webView.canGoBack()){
        webView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

第三章弹框组件

3.1Toast

可以设置显示位置

可以自定义显示内容

简单封装

新建一个activity
跳转
修改布局文件
    写个button
        默认
        Toast.makeText(getApplicationContext(),"",LENGTH_LONG).show();
    写个button
        改变位置
        Toast toast = Toast.makeText(getApplicationContext(),"",LENGTH_LONG);
        toast.setGravity(Gravity.CENTER,0,0);
        toast.show();
    写个button
        有图片
        自定义一个布局,设置图片和text,黑色的来电透明度,两位数字加rgb
        Toast toast = new Toast(getApplicationContext());
        LayoutInflater inflater = new LayoutInflater.from(ToastActivity.this);
        View view = inflater.inflate(R.layout.xxxx,null);
        ImageView imageView = view.findViewById(...);
        TextView textView = view.findViewById(...);
        imgaeView.setImageResource(R.drawable.xx);
        textView.setText("0.0.0.");
        toast.setView(view);
        tosat.show();
在activity里声明,找到
    写个类实现onclickListener的接口
        每个按钮set这个类的对象
    接口里用switch不同的id做不同的操作

要使宽高都有效布局文件里再套一个布局

以最后一下为准的设置
    封装一个简单的类
        建一个util包
            写个类ToastUtil
                写一个showmsg的方法
                判断toast是否存在,存在就改消息,不存在就赋值。
            
    

3.2AlertDialog

默认样式

单选样式

多选样式

自定义样式

建Activity
跳转
新建activity之后改成启动activity就可以了
写个OnClick的类,之后声明这个对象使用
    写个onClick(View view)方法,
    switch(view.getId())的方式做不同的跳转

使用v7的AlertDialog
    Dialog.Bulider builer = new AlertDialog.Builder(当前的Activity.this);
    builder.setTitle("0.0.0.");
    builder.setMessage("0.0.0.");
    //builder.setTitle("0.0.0.").setMessage("0.0.0.").setPositiveButton("0.0.",new OnclickListener(....))
    .setNeutralButton
    .setNegativeButton....show();
    
    
    
//单选的做法
就是setItems(array,new DialogOnclickListner。。。)//传入数组

//加一点修饰
setSingleChoiceItems(array,0,new DialogOnclickListener())
//希望点击选项对话框小时,点击空白处不消失
setCancelable(false)
点击事件里要加上dialog.dismiss();


//多选
setMultiChoicItems(array,boolean类型数组,,new onMultiChoiceClickListener)



//自定义
先画一个布局
View view = LayoutInflater.from(这个类).inflate(R.layout.xxx);
声明各个控件
.setView(view)

3.3ProgressBar & ProgressDialog

直接layout里弄这个控件

<ProgressBar 
    style
    visibility
/>

转圈
横向


写一个handler对象,然后重写handleMessage放啊
这个方法里增加使用handler.postDelayed(runnable,500)

再多些一个Runnable runnable对象,重写一下run方法
sendEmptyMessage(0)//发送空消息让他执行


//实现转圈
建立一个旋转的图标
indeterminateDrawable
布局里要写上旋转的中心


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351