Android初级-常用控件(下),资源

01-进度条(ProgressBar)的概述,属性,常用方法

//在开发时,当需要下载或上传文件时,需要让用户知道当前的进度,就需要使用进度条 
//xml中使用 
<ProgressBar android:id="@+id/pb_id" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:progress="20" 
        android:secondaryProgress="50" 
        style="@android:style/Widget.ProgressBar.Horizontal" 
        android:max="100"/>    
 
//减少或增加进度,值为整数就是增加,负数就是减少 
pb_show.incrementProgressBy(-5);//第一进度 
pb_show.incrementSecondaryProgressBy(-3);//第二进度

02-拖动条(SeekBar)的概述,属性,常用方法

 
//在开发过程中,音量及音视频播放的时候, 
//需要快速定位到某个地方,这时候可以使用拖动条来实现 
//xml中定义拖动条来使用 
<SeekBar 
        android:id="@+id/sb_id" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:max="255" //最大进度,是音视频的最大时长 
        android:progress="50" //当前定位到的播放位置/> 
//拖动SeekBar,进行监听,调整当前位置 
//为seekBar设置监听事件 
sb_id.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
    //停止拖动 
    @Override 
    public void onStopTrackingTouch(SeekBar seekBar) { 
        Log.e("--Main--", "--------停止拖动-------"); 
    }
 
19
    //开始拖动 
    @Override 
    public void onStartTrackingTouch(SeekBar seekBar) { 
        Log.e("--Main--", "--------开始拖动-------"); 
    }
 
    //拖动中 
    @Override 
    public void onProgressChanged(SeekBar seekBar, 
                         int progress, boolean fromUser) { 
        Log.e("--Main--", "--------拖动中:progress="+progress); 
        iv_head.setAlpha(progress);//修改图片的透明度 
        tv_show.setText(String.valueOf(progress));//修改文本显示的内容 
    } 
});

03-AlertDialog作用以及使用场景,不同样式的对话框创建显示(两个案例 基本 和 自定义)

image.png

1.普通对话框:

//在做删除修改退出等时,需要提示用户就需要用到提示框 
//AlertDialog弹出对话框就是完成这项功能的
 
// A:弹出普通对话框 
// 1.创建一个AlertDialog.Builder对象 
new AlertDialog.Builder(this) 
// 2.给Builder对象设置标题,图标等 
.setIcon(R.drawable.f).setTitle("普通对话框ssss") 
// 3.给Builder对象设置信息 
.setMessage("大家好帅吗?sssss") 
// 4.设置确定,取消按钮 
.setPositiveButton("帅ssss", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
        Toast.makeText(MainActivity.this, "你选择帅sss", Toast.LENGTH_SHORT).show(); 
    } 
}).setNegativeButton("不帅sss", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
        Toast.makeText(MainActivity.this, "你选择不帅sss", Toast.LENGTH_SHORT).show(); 
    } 
}) 
// 5.显示对话框 
.show();

2.自定义视图的对话框

image.png
//创建线性布局 
LinearLayout ll = new LinearLayout(this); 
ll.setOrientation(LinearLayout.VERTICAL);//设置布局走向为垂直 
//创建输入框对象 
final EditText et_name = new EditText(this); 
et_name.setHint("请输入用户名"); 
final EditText et_psw = new EditText(this); 
et_psw.setHint("请输入密码");
 
Button button = new Button(this); 
button.setText("哈哈"); 
button.setLayoutParams(new ViewGroup.LayoutParams( 
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 
//将输入框添加到线性布局中 
ll.addView(et_name); 
ll.addView(et_psw); 
ll.addView(button);
 
//1.创建一个AlertDialog.Builder对象 
new AlertDialog.Builder(this) 
//2.给Builder对象设置图标,标题 
.setIcon(R.drawable.ic_launcher) 
.setTitle("自定义对话框") 
//3.给Builder对象设置自定义内容 
.setView(ll)//将自定义视图设置到对话框中 
//4.设置确定和取消按钮 
.setPositiveButton("确定", new DialogInterface.OnClickListener() { 
@Override 
public void onClick(DialogInterface dialog, int which) { 
    // 获取输入框中的内容 
    String name = et_name.getText().toString(); 
    String psw = et_psw.getText().toString(); 
    Toast.makeText(MainActivity.this, "输入框的内容是:用户名:"+ 
                    name+",密码:"+psw, Toast.LENGTH_SHORT).show(); 
    } 
}) 
.setNegativeButton("取消", null) 
//5.显示对话框 
.show();

04-通过java代码实现UI效果(最基础的)


//创建线性布局 
LinearLayout ll = new LinearLayout(this); 
ll.setOrientation(LinearLayout.VERTICAL);//设置布局走向为垂直 
//创建输入框对象 
final EditText et_name = new EditText(this); 
et_name.setHint("请输入用户名"); 
final EditText et_psw = new EditText(this); 
et_psw.setHint("请输入密码");

05-资源命名规范,以及应用资源的统一整理(尺寸适配和图片适配的命名)
dpi范围密度对应范围


dpi  密度 

0dpi ~ 120dpi  ldpi 

120dpi ~ 160dpi  mdpi 

160dpi ~ 240dpi  hdpi 

240dpi ~ 320dpi   xhdpi 

320dpi ~ 480dpi   xxhdpi 

480dpi ~ 640dpi   xxxhdpi 

对于每种密度下的icon应该设计成什么尺寸其实Android也是给出了最佳建议


mipmap-mdpi    48 * 48(博主实测图标16就够了) 

mipmap-hdpi     72 * 72(博主实测图标32就够了) 

mipmap-xhdpi     96 * 96(博主实测图标48就够了) 

mipmap-xxhdpi    144 * 144(博主实测图标64就够了) 

mipmap-xxxhdpi    192 * 192(博主实测图标72就够了) 

06-shape自定义图片

使用自定义shap步骤: 
1.在res下创建drawable目录 
2.在drawable目录下创建一个根标签为shape的xml文件 
3.去指定shape的形状及填充颜色等 
4.在布局资源中使用backgroud属性来引入使用该图形xml

//椭圆(圆) 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval" > 
    //渐变色 
    <gradient android:startColor="#F80101" 
        android:centerColor="#0B20BA" 
        android:endColor="#1AAE0E"/> 
</shape>

//矩形 
<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 
    //圆角 
    <corners android:radius="30dp"/> 
    //填充颜色 
    <solid android:color="#FF0000"/> 
</shape>


//环形 
<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"  
    android:shape="ring" 
    android:innerRadius="20dp" 
    android:thickness="19dp" 
    android:useLevel="false"> 
    <!-- android:innerRadius="30dp" 内圆半径
     android:thickness="10dp" 环形宽度 -->
 
     <!-- 给环形加边框     
         注意:边框的宽度+环形的宽度+内圆的半径=组件宽度的一半 --> 
    <stroke android:width="1dp" 
        android:color="#FD0202"/>
 
        <!-- 填充色会填充环形 --> 
        <solid android:color="#48C36C"/> 
</shape>

//选择器 
<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <!-- android:state_pressed="false"组件没有被按下时显示的背景 
    android:drawable="@drawable/rectangle_bg" 
     --> 
    <item android:state_pressed="false"  
        android:drawable="@drawable/rectangle_bg"></item>
 
     <!-- android:state_pressed="true"组件被按下时显示的背景 
    android:drawable="@drawable/rectangle_bg2" 
     --> 
    <item android:state_pressed="true"  
        android:drawable="@drawable/rectangle_bg2"></item> 
</selector>

07-style样式资源和theme主题资源的使用

//在styles.xml中定义自定义主题 
<!-- 自定义主题 --> 
<style name="MyAppTheme" parent="AppBaseTheme"> 
    <!-- 隐藏标题栏 --> 
    <item name="android:windowNoTitle">true</item> 
    <!-- 隐藏状态栏 --> 
    <item name="android:windowFullscreen">true</item> 
    <!-- 添加边框 --> 
    <item name="android:windowFrame">@drawable/t</item> 
</style> 
  
//java代码中为某个Activity设置该主题 
// Java代码实现:使用自定义的主题,在onCreate方法的setContentView方法之前使用 
setTheme(R.style.MyAppTheme); 
setContentView(R.layout.activity_theme);

 
//xml中使用自定义主题 
//在application标签下指定android:theme="@style/MyAppTheme" 主题, 
    //整个应用都使用该主题 
//在activity标签下指定android:theme="@style/MyAppTheme" 主题, 
    //只有该Activity有该主题 
<application 
        android:allowBackup="true" 
        android:icon="@drawable/ic_launcher" 
        android:label="@string/app_name" 
        android:theme="@style/AppTheme" > 
        <activity 
            android:name=".MainActivity" 
            android:label="@string/app_name" > 
        </activity>

08-style设置TextView 的宽高、字体大小及颜色、背景;theme的应用样式


 <style name="myTextViewStyle"> 
        <item name="android:layout_width">match_parent</item> 
        <item name="android:layout_height">wrap_content</item> 
        <item name="android:padding">10dp</item> 
        <item name="android:textSize">26sp</item> 
        <item name="android:layout_margin">10dp</item> 
        <item name="android:textColor">#D722CF</item> 
        <item name="android:background">#629BF5</item> 
    </style>

09-raw与assets中资源的区别

 
/*在建立项目中一般会默认建立assets文件, 
    当然我们还可以在res文件下面建立raw文件夹, 
    这里面都可以存放一些图片,音频或者文本信息, 
    可以供我们在程序当中进行使用,不过他们两个也有不同点; 
    assets下面的文件不会被编译,通过路径可以去访问其中的内容。 
    raw中文件会自动编译,我们可以在R.java文件中找到对应的ID, 
 * Raw目录和Assets目录的区别 
 *  1.Raw目录下的文件可以映射到R文件中,Assets目录不可以 
 *  2.Raw目录下文件通过Resources类来获取, 
             Assets目录下的文件通过AssetsManager类来获取 
 * 3.Raw目录下不可以再创建文件夹,Assets目录可以 
 * 4.Raw目录和Assets目录都是原生资源,在Apk打包时不会编译成二进制文件。 
 */ 
 //1.获取AssetsManager对象 
// 1.获取AssetsManager对象 
AssetManager assetManager = getAssets(); 
try { 
    // 2.通过AssetsManager对象的open来获取文件名对应的输入流 
    InputStream is = assetManager.open("aa/test2.txt"); 
    // 3.将流转为字符串 
    BufferedReader br = new BufferedReader(new InputStreamReader(is, "gbk")); 
    StringBuffer sb = new StringBuffer(); 
    String line = null; 
    while ((line = br.readLine()) != null) { 
    sb.append(line); 
    }

 
    // 将读取到的内容吐司出来 
    Toast.makeText(this, sb.toString(), Toast.LENGTH_SHORT).show(); 
} catch (IOException e) { 
    e.printStackTrace(); 
}
 
// 1.获取raw目录下的文件,需要用到资源管理类 
Resources resources = getResources(); 
// 2.通过Resources对象的openRawResource(R.raw.test) 获取到指定的文件对应的流 
InputStream is = resources.openRawResource(R.raw.test); 
// 3.将流转为字符串 
try { 
    BufferedReader br = new BufferedReader(new InputStreamReader(is, "gbk")); 
    StringBuffer sb = new StringBuffer(); 
    String line = null; 
    while ((line = br.readLine()) != null) { 
    sb.append(line); 
    } 
    // 将读取到的内容吐司出来 
    Toast.makeText(this, sb.toString(), Toast.LENGTH_SHORT).show(); 
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

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

推荐阅读更多精彩内容