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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容