Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android中的高級組件(一)progressBar、SeekBar、RatingBar等

android中的高級組件(一)progressBar、SeekBar、RatingBar等

編輯:關於Android編程

ProgressBar

作用:當應在後台執行時,前台界面不會有任何信息,這時用戶根本不知道程序是否在執行,以及執
行進度等,因些需要使用進度條來提示程序執行的進度.在Android中進度條使用ProgressBar表
示.用於身用戶顯示某個耗時操作完成的百分比。

常用屬性:
1. android:max 設置進度條的最大值
2. android:progress 用於指定進度條的已完成的進度值
3. android:progressDrawable 用於設置進度條的軌道繪制形式

對應get與set方法
Max:最大進度
setProgress()設置當前的進度,必須手動在代碼中設置
做了UI處理,可以直接在UI子線程中處理

示例圖如下:

這裡寫圖片描述

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ProgressBar pb = (ProgressBar) findViewById(R.id.pb1);
        final TextView tv = (TextView) findViewById(R.id.tv);
        pb.setMax(200);
        pb.setProgress(0);
        new Thread() {
            public void run() {
                // 模擬耗時任務
                int index = 0;
                while (index++ < 200) {
                    try {
                        Thread.sleep((int) (Math.random() * 200));
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    // 修改值
                    // 做了UI的處理,所以直接可以再子線程中修改UI
                    pb.setProgress(index);
                    // 需要使用UI線程
                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            tv.setText(pb.getProgress() + "/" + pb.getMax());
                        }
                    });
                }

            };
        }.start();
    }

}


//xml的配置


    

    

SeekBar 拖動條

跟ProgressBar一樣,只是多了一個監聽的方法
setOnSeekBarChangeListener

重寫三個方法
    onStopTrackingTouch(SeekBar seekBar)
    拖拽完成後的方法
    onStartTrackingTouch(SeekBar seekBar)
    開始拖拽時,也就是用戶剛好點上去的方法
    onProgressChanged(SeekBar seekBar, int progress,boolean fromUser)
    每次進度改變都會調用,fromUser是用來判斷是否是用戶改變的進度

獲取系統服務
XXXManager manager = (XXXManager)Context.getSystemService(服務名稱);

示例圖如下

這裡寫圖片描述

/**
 * 需要用他調節音量大小
 * 
 * @author Administrator
 *
 */

/**
 * 所有操作系統的 都需要Service系統服務
 * 
 * @author Administrator
 *
 */

public class MainActivity extends Activity {
    SeekBar seekBar;
    TextView tv;
    AudioManager manager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        seekBar = (SeekBar) findViewById(R.id.seekBar1);
        tv = (TextView) findViewById(R.id.tv);
        seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // 拖拽完畢
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // 開始拖拽時 用戶剛好點上去
            }

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {
                // 每次進度改變都會調用
                // 是否是用戶改變的呢???
                // if (fromUser) {
                tv.setText(progress + "/" + seekBar.getMax());
                // }
                // 拖動進度條,我需要改變音量
                // flags用來 需不需要聲音 是否需要ui
                manager.setStreamVolume(AudioManager.STREAM_MUSIC, progress,
                        AudioManager.FLAG_SHOW_UI
                                | AudioManager.FLAG_PLAY_SOUND);

            }
        });
        // seekBar.setMax(200);
        // seekBar.setProgress(50);

        // 獲取系統服務
        // 獲取音頻管理器
        manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        // 獲取他的最大值 0-15
        int max = manager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        seekBar.setMax(max);
        // 本來就有一個聲量值
        int volumn = manager.getStreamVolume(AudioManager.STREAM_MUSIC);
        Log.e("TAG", volumn + "   ");
        seekBar.setProgress(volumn);
    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
            // ++
            seekBar.setProgress(seekBar.getProgress() + 1);
        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
            seekBar.setProgress(seekBar.getProgress() - 1);
        }
        return super.onKeyUp(keyCode, event);
    }
}


//xml中的配置



    

    

   

RatingBar

同上SeekBar,就是圖像不一樣

ScrollView

只能鑲嵌一個View,一般鑲嵌布局
滑動事件 view.fullScroll(ScrollView.FOCUS_DOWN); 必須放在post或者
onWindowFocusChange中

示例圖如下

這裡寫圖片描述

ublic class MainActivity extends Activity {

    ScrollView view;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        view = (ScrollView) findViewById(R.id.view);
        // 滑動到指定位置
        // 這個方法必須等待view完全顯示
        // post 延遲操作
        int width = view.getWidth();
        Log.e("TAG", width + "  ");
        final long startTime = System.currentTimeMillis();
        // view在這裡還並沒有在完成
        view.post(new Runnable() {

            @Override
            public void run() {
                int width = view.getWidth();
                Log.e("TAG", width + "  "
                        + (System.currentTimeMillis() - startTime));
                view.fullScroll(ScrollView.FOCUS_DOWN);
            }
        });
    }
    //
    // @Override
    // public void onWindowFocusChanged(boolean hasFocus) {
    // super.onWindowFocusChanged(hasFocus);
    // view.fullScroll(ScrollView.FOCUS_DOWN);
    // }

}

//xml注意,必須把屏幕占滿


    

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        
    

HorizontalScrollView 水平滾動視圖

HorizontalScrollView和ScrollView差不多,只是滾動方式為橫向

AutoCompleteTextView自動完成文本框

AutoCompleteTextView繼承與EditText,擁有EditText的所有屬性和方法。

常用屬性:
1. android:completionHint 用於彈出的下拉菜單指定提示標題
2. android:completionThreshold 用於指定用戶至少輸入幾個字符才會顯示提示
3. android:dropDownHeight 用於指定下拉菜單的高度
4. android:dropDownHorizontalOffset 用於指定下拉腰間與文本之間的水平偏移.下拉
腰間默認與文本左對齊
5. android:dropDownVerticalOffset 用於指定下拉腰間與文本之間的垂直領銜.下拉
菜單默認緊跟文本框
6. android:dropDownWidth 用於指定下拉菜單的寬度
7. android:popupBackground 用於為下拉菜單設置背景

示例圖如下:

這裡寫圖片描述

public class MainActivity extends Activity {

    // 數據源
    String[] data = { "zhangsan", "lisi", "wangwu", "zhaoliu", "tianqi",
            "wangba", "xiaojiujiu", "李四", "李五", "李六" };

    AutoCompleteTextView actv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 顯示
        actv = (AutoCompleteTextView) findViewById(R.id.actv);
        // 適配器
        ArrayAdapter adapter = new ArrayAdapter(this,
                R.layout.item_actv, R.id.tv, data);
        // 所有需要適配器的view
        actv.setAdapter(adapter);
    }

}

//主xml


    



//顯示樣式的xml



    

    
    

MultiAutoCompleteTextView 自動完成文本框

AutoCompleteTextView和MultiAutoCompleteTextView都需要通過適配器將數據綁定到組件上

MultiAutoCompleteTextView必須制定分隔符

setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer())

示例圖如下:

這裡寫圖片描述

public class MainActivity extends Activity {

    MultiAutoCompleteTextView mactv;

    // 數據源
    String[] data = { "zhangsan", "lisi", "wangwu", "zhaoliu", "tianqi",
            "wangba", "xiaojiujiu", "李四" };
    ArrayAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mactv = (MultiAutoCompleteTextView) findViewById(R.id.mactv);
        adapter = new ArrayAdapter(this,
                android.R.layout.simple_list_item_1, data);
        mactv.setAdapter(adapter);
        // CommaTokenizer實現好了的 以逗號分隔
        mactv.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
    }

}

//xml中的配置


    

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved