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