如何将音量滑块添加到android操作栏?

时间:2014-02-28 17:23:29

标签: android android-actionbar

我想将音量添加到操作栏。 当用户点击该操作时,它应将滑块放在操作栏中以便选择右侧 体积 我该怎么做

3 个答案:

答案 0 :(得分:5)

处理此问题的最简单方法是使用ActionBar.setCustomView

以下是控制媒体音量的示例:

首先,您需要创建包含SeekBar的自定义布局。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <SeekBar
        android:id="@android:id/progress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical" />

</FrameLayout>

现在在SeekBar.OnSeekBarChangeListenerActivity中实施Fragment并声明几个变量:

/** Used to actually adjust the volume */
private AudioManager mAudioManager;
/** Used to control the volume for a given stream type */
private SeekBar mVolumeControls;
/** True is the volume controls are showing, false otherwise */
private boolean mShowingControls;

onCreate或您选择的任何地方,将自定义View充气并应用到ActionBar

    // Control the media volume
    setVolumeControlStream(AudioManager.STREAM_MUSIC);
    // Initialize the AudioManager
    mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

    // Inflate the custom ActionBar View
    final View view = getLayoutInflater().inflate(R.layout.view_action_bar_slider, null);
    mVolumeControls = (SeekBar) view.findViewById(android.R.id.progress);
    // Set the max range of the SeekBar to the max volume stream type
    mVolumeControls.setMax(mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
    // Bind the OnSeekBarChangeListener
    mVolumeControls.setOnSeekBarChangeListener(this);

    // Apply the custom View to the ActionBar
    getActionBar().setCustomView(view, new ActionBar.LayoutParams(MATCH_PARENT, MATCH_PARENT));

要在按下MenuItem时切换控件,请拨打ActionBar.setDisplayShowCustomEnabled并不要忘记将SeekBar进度更新为您正在控制的当前音量级别。

        // Toggle the custom View's visibility
        mShowingControls = !mShowingControls;
        getActionBar().setDisplayShowCustomEnabled(mShowingControls);
        // Set the progress to the current volume level of the stream
        mVolumeControls.setProgress(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC));

要在OnSeekBarChangeListener.onProgressChanged来电AudioManager.setStreamVolume

中控制音量流
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    // Adjust the volume for the given stream type
    mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
}

最后在OnSeekBarChangeListener.onStopTrackingTouch中,删除自定义控件以再次正常显示ActionBar

    // Remove the SeekBar from the ActionBar
    mShowingControls = false;
    getActionBar().setDisplayShowCustomEnabled(false);

以下是您按MenuItem之前和之后的图片。

enter image description here

答案 1 :(得分:0)

这是类似问题的answer。他想添加完整的音频控制按钮。您将了解如何将控件Seekbar添加到actionBar以及如何处理它。

我希望它有所帮助

答案 2 :(得分:0)

首先,根据需要将搜索栏添加到工具栏,这是我的解决方案

  <androidx.appcompat.widget.Toolbar
        android:id="@+id/my_toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:elevation="4dp"
        android:minHeight="?attr/actionBarSize"
        app:layout_constraintTop_toTopOf="parent"
        app:title="Interval timer">
    <SeekBar
        android:id="@+id/AudioSliderToolbar"
        android:layout_width="190dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:progress="999"/>
    </androidx.appcompat.widget.Toolbar>

第二

创建两个变量

private var volumeSeekbar: SeekBar? = null
private var audioManager: AudioManager? = null

第三

创建时参与

    //audio seekbar
    setVolumeControlStream(AudioManager.STREAM_MUSIC);
    initControls()

方法initControls()

//audio seek bar
private fun initControls() {
    try {
        volumeSeekbar = findViewById(R.id.AudioSliderToolbar)
        audioManager = getSystemService(AUDIO_SERVICE) as AudioManager
        volumeSeekbar!!.setMax(
            audioManager!!
                .getStreamMaxVolume(AudioManager.STREAM_MUSIC)
        )
        volumeSeekbar!!.setProgress(
            audioManager!!
                .getStreamVolume(AudioManager.STREAM_MUSIC)
        )
        volumeSeekbar!!.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
            override fun onProgressChanged(seekBar: SeekBar, i: Int, b: Boolean) {
                // Display the current progress of SeekBar
                audioManager!!.setStreamVolume(
                    AudioManager.STREAM_MUSIC,
                    i, 0
                );
            }

            override fun onStartTrackingTouch(seekBar: SeekBar) {
                // Do something
                Toast.makeText(applicationContext, "start tracking", Toast.LENGTH_SHORT).show()
            }

            override fun onStopTrackingTouch(seekBar: SeekBar) {
                // Do something
                Toast.makeText(applicationContext, "stop tracking", Toast.LENGTH_SHORT).show()
            }
        })

    } catch (e: Exception) {
        //e.toString();
    }


}

我希望这会对某人有所帮助,只是解决了这个问题,并希望与他人分享。 内纳德(Nenad)高兴