A. android怎么给控件添加选择器
1 在/res/drawable/目录下面新建一个xml文件,drawable就在res下面新建这个目录
5 上面的步骤完成时枣拦,找到你的控件所在的layout,设置其background属性,如果上面selector叫button_press.xml,那么其属性就是android:background="@drawable/button_press"
B. Android编程 打开本地文件 文件选择器
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Button
android:id="@+id/b01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<ImageView
android:id="@+id/iv01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
代码
java">import java.io.FileNotFoundException;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class Lesson_01_Pic extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button)findViewById(R.id.b01);
button.setText("选择图片");
button.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent();
/* 开启Pictures画面Type设定为image */
intent.setType("image/*");
/* 使用Intent.ACTION_GET_CONTENT这个Action */
intent.setAction(Intent.ACTION_GET_CONTENT);
/* 取得相片后返回本画面 */
startActivityForResult(intent, 1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
Uri uri = data.getData();
Log.e("uri", uri.toString());
ContentResolver cr = this.getContentResolver();
try {
Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));
ImageView imageView = (ImageView) findViewById(R.id.iv01);
/* 将Bitmap设定到ImageView */
imageView.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
Log.e("Exception", e.getMessage(),e);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
}
C. Android仿ios条件选择器pickerview
最近怎么老写View,可能写view比较方便,写其它东西还要抽时间整理总结,写View就直接封完写出来就行。
准备国庆放假,无心工作,那就写篇简单实用一点的文章,总不能白白浪费了时间。
有时候ios端会用到条件选择器,好像是那边自带的,而android这边是没有的,但是为了两端统一,没办法,只能我们去迁就他们了(你让一个有自带的去写自定义是基本不可能的事)。
最经典的是我们有选择地址的需求,比如美团这里的:
这个android是原生是没有的,只有能选择日期的。那怎么办?自定义,好像略难,那就用三方的吧。
https://github.com/Bigkoo/Android-PickerView
我找了很多,就觉得这个库是做得比较好,比较完整的,而且也一直有在维护,还是比较推荐,使用起来也比较方便。项目里有很清晰的文档,建议看之前先浏览过文档。
我使用的效果:
我还是顺便把源码也浏览了下。发现这里有3个比较重要的类,这个之后会简单的介绍:
(1)WheelView
(2)条件选择的WheelOptions, 我感觉这个类的封装有点vm的意思
(3)最外层封装的OptionsPickerView
如果只是为了选择地址的话直接用它封装好的就行,但是有时候可能会需要用到其它的布局或需求,那我们就要在它原有的功能上进行扩展,比如说我写的这个时间段的现在,直接用是没有的,需要自己扩展。
而要进行扩展的话,就要先浏览源码看看它内部怎么写的。
可以从调用的地方找到OptionsPickerView类
然后看看OptionsPickerView类内部,你会发现很多方法,但是基本都是builder方法个getset方法,我们可以找到重要的几个方法。
这里做的是为view设置属性。重要的是这里
这里的意思就是把这个View给WheelOptions这个对象,让它来做处理。然后可以看
看布局。
可以看出它里面是写死固定就是3列。其实我不太赞成这样的做法,对于这样的多情况view的封装,我个人还是比较喜欢做动态的。由于这里固定是3列,所以我上图中4列的情况直接使用是实现不了的,所以需要扩展。这里的WheelView就是单列
它这里布局写死了固定3列,那我肯定是没法复用它的这个布局了,所以就只能重写布局。
我只写了LinearLayout,就是要动态去添加WheelView。
原本的OptionsPickerView中
在builder构造时就固定了布局,所以我这不好扩展,不如重写一个OptionsPickerView,当然重写Builder也行,但是我觉得重写OptionsPickerView比较好。而且他原本只有两个类
所以我们需要继承BasePickerView重写一个PickerView,他原本内部的逻辑没问题,我就抄过来用好了。
修改了
(1)修改布局变成我的布局
(2)然后把创建WheelView给加扩展createWheel(optionsPicker, context, total);因为我不想每次都都写Builder这么多参数,我把这个pickerview当成中间成来弄,让子类继承它来做简单的扩展
我们重写个WheelView,因为原本的WheelView是做固定3列的处理,我们需要做成个动态的。
(1)我多添加了个参数total表示要展示多少列
(2)用List<WheelView> wvList数组来动态创建添加WheelView
(3)用List<List<T>> items 来装每一列的数据(我这个Wheel只做了不关联情况下的多列,关联情况下我没弄)
(4)showWheelView();
这个方法做展示的规则,默认是平均展示total列,而如果需要做特殊的展示情况,像我上边一样的,就写个类继承这个类重新这个方法重新展示的规则就行,比如我的时间期间选择器。
重写这个方法就能展示出自己需要展示的效果
调用时也很方便。
我讲这篇的目的是为了第一介绍一下这个三方库,还是比较实用的。第二,说下扩展的重要性。第三,放假了实在工作效率低。
D. AndroidUI控件switch使用方法
首先添加控件:
<Switch
android:id="@+id/sw_sfktmmzf"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:showText="false"
android:switchMinWidth="50dp"
android:thumb="@drawable/thumb"
android:track="@drawable/track" />
以下是该控件的常用属性:
textOn:控件打开时显示的文字
textOff:控件关闭时显示的文字
thumb:控件开关的图片(设置小圆圈颜色)
track:控件开关的轨迹图片(设置小圆圈背景颜色)
typeface:设置字体类型
switchMinWidth:开关最小宽度
switchPadding:设置开关 与文字的空白距离
switchTextAppearance:设置文本的风格
checked:设置初始选中状态
splitTrack:是否设置一个间隙,让滑块与底部图片分隔(API 21及以上)
showText:设置是否显示开关上的文字(API 21及以上)
创建北京控制文件在drawable文件下
1、thumb.xml
<?xml version="1.0" encoding="utf-8"?><!-- 按钮的选择器,可以设置按钮在不同状态下的时候,按钮不同的颜色 -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/green_thumb" android:state_checked="true" />
<item android:drawable="@drawable/gray_thumb" />
颜色文件:
green_thumb.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!-- 高度40 -->
<size android:height="@dimen/switch_height" android:width="@dimen/switch_height"/>
<!-- 圆角弧度 20 -->
<corners android:radius="20dp"/>
<!-- 变化率 -->
<gradient
android:endColor="#eeeeee"
android:startColor="#eeeeee" />
<stroke android:width="1dp"
android:color="@color/home_text1"/>
</shape>
gray_thumb.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!-- 高度40 -->
<size android:height="@dimen/switch_height" android:width="@dimen/switch_height"/>
<!-- 圆角弧度 20 -->
<corners android:radius="20dp"/>
<!-- 变化率 -->
<gradient
android:endColor="#eeeeee"
android:startColor="#eeeeee" />
<stroke android:width="1dp"
android:color="@color/text_color03"/>
</shape>
2、track.xml
<?xml version="1.0" encoding="utf-8"?><!-- 底层下滑条的样式选择器,可控制Switch在不同状态下,底下下滑条的颜色 -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/green_track" android:state_checked="true" />
<item android:drawable="@drawable/gray_track" />
</selector>
颜色文件:
green_track.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 高度40 -->
<size android:height="@dimen/switch_height"/>
<!-- 圆角弧度 20 -->
<corners android:radius="15dp"/>
<!-- 变化率 -->
<gradient
android:endColor="@color/home_text1"
android:startColor="@color/home_text1" />
</shape>
gray_track.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 高度30 此处设置宽度无效-->
<size android:height="@dimen/switch_height" />
<!-- 圆角弧度 15 -->
<corners android:radius="15dp" />
<!-- 变化率 定义从左到右的颜色不变 -->
<gradient
android:endColor="@color/text_color03"
android:startColor="@color/text_color03" />
</shape>
switch 控件监听事件:
aSwitch.setOnCheckedChangeListener(newCompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//控制开关字体颜色
if(isChecked) {
//打开
}else{
//关闭
}
}
});
E. android怎么在代码中设置状态选择器
这个是非常简单的,只需要按照下面的步骤进行即可。
首先新建一个状态选择器,创建在drawable目录下,创建的格式如下:,记住创建时的名字,待会要使用。
<spanstyle="font-size:14px;"><?xmlversion="1.0"encoding="utf-8"?>
<selectorxmlns:android="http://schemas.android.com/apk/res/android">
<itemandroid:drawable="@drawable/function_greenbutton_pressed"android:state_pressed="true"/>//按下的图片
<!--pressed-->
<itemandroid:drawable="@drawable/function_greenbutton_pressed"android:state_focused="true"/>//获取焦点的图片
<!--focused-->
<itemandroid:drawable="@drawable/function_greenbutton_normal"/>
<!--default-->//默认图片
</selector>
然后在布局文件中创建一个button控件
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn"/>
由于View类中PRESSED_ENABLED_STATE_SET值不是公共常量,所以通过继承来实现。
classMyButtonextendsView{
publicMyButton(Contextcontext){
super(context);
}
//以下这个方法也可以把你的图片数组传过来,以StateListDrawable来设置图片状态,来表现button的各中状态。未选
//中,按下,选中效果。
publicStateListDrawablesetbg(Integer[]mImageIds){
StateListDrawablebg=newStateListDrawable();
Drawablenormal=this.getResources().getDrawable(mImageIds[0]);
Drawableselected=this.getResources().getDrawable(mImageIds[1]);
Drawablepressed=this.getResources().getDrawable(mImageIds[2]);
bg.addState(View.PRESSED_ENABLED_STATE_SET,pressed);
bg.addState(View.ENABLED_FOCUSED_STATE_SET,selected);
bg.addState(View.ENABLED_STATE_SET,normal);
bg.addState(View.FOCUSED_STATE_SET,selected);
bg.addState(View.EMPTY_STATE_SET,normal);
returnbg;
}
}
然后执行下面的代码即可成功设置状态选择器
Integer[]mButtonState={R.drawable.defaultbutton,
R.drawable.focusedpressed,R.drawable.pressed};
ButtonmButton=(Button)findViewById(R.id.button);
MyButtonmyButton=newMyButton(this);
mButton.setBackgroundDrawable(myButton.setbg(mButtonState));