iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0

什麼是SeekBar

SeekBar是android專門用來調整音量跟亮度放置在ui畫面上非常好看的ui元件

什麼是toast

今天我想來介紹怎麼使用SeekBar並使用toast做通知方式的顯示。
toast是當件事情被觸發時,在畫面下方顯示出一段指定的文字。像是訊息通一樣,非常酷炫。

ui

拉一個seekbar跟一個text做百分比的顯示

 <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="75dp"
        android:max="100"
        android:progress="0"/>
    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30dp"
        android:text="目前數值: 0/100" />

seekbar屬性介紹

android:max="100" 設定最大值
android:progress 設定預設值
android:thumbTint設定進度點顏色
android:progressTint 設定進度條顏色

程式

先宣告跟綁定

    private SeekBar seekBar;
    private TextView textView;
seekBar = (SeekBar) findViewById(R.id.seekBar);
textView = (TextView) findViewById(R.id.textView);

新增一個listener觀察seekbar並在滑動時改變textview文字,時時緊跟變化百分比

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                textView.setText("目前數值:" + progress + "  / 100 ");

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
             
            }
        });

Toast的應用

我們可以直接在各行指令指定想要顯示的介面參數

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        seekBar = (SeekBar) findViewById(R.id.seekBar);
        textView = (TextView) findViewById(R.id.textView);

        textView.setText("目前數值: 50 / 100");
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                textView.setText("目前數值:" + progress + "  / 100 ");

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                Toast.makeText(MainActivity.this, "按住SeekBar", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                Toast.makeText(MainActivity.this, "放開SeekBar", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

但更好的做法是設一個變數context這樣我們想要更改toast顯示在哪個畫面時之後會更靈活跟方便
我們可以使用Context表達MainActivity
在toast指定Context指定的畫面上,做顯示設定的文字
private Context Context;
Context = MainActivity.this;
Toast.makeText(Context, "按住SeekBar", Toast.LENGTH_SHORT).show();
完整程式碼


public class MainActivity extends AppCompatActivity {
    private SeekBar seekBar;
    private TextView textView;
    private Context Context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Context = MainActivity.this;
        seekBar = (SeekBar) findViewById(R.id.seekBar);
        textView = (TextView) findViewById(R.id.textView);

        textView.setText("目前數值: 50 / 100");
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                textView.setText("目前數值:" + progress + "  / 100 ");

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                Toast.makeText(Context, "按住SeekBar", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                Toast.makeText(Context, "放開SeekBar", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

最後成果展示


上一篇
[day17]Tablayout 結合viewpager2
下一篇
[day19]checkbox+button
系列文
深入Android 物件的認識與應用實踐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言