自定义Dialog之Progress(二)

自定义Dialog之Progress(二)

系统的Dialog一般是适合UI设计的需求,那么就需要自定义的ProgressDialog.

第一想法就是能在应用级别全局改变应用的ProgressDialog的样式。(已经试过,没有成功)做法是:
<item name="android:progressBarStyle">@style/theme.customer_progress_dialog</item>

@style/theme.customer_progress_dialog 是自定义的theme

如果有成功的,希望能分享下,谢谢。


第二种做法是自定义theme, 然后定义一个ProgressDialog:CustomProgressDialog. 在应用里面就用这个.

自定义theme:

<style name="theme.customer_progress_dialog" parent="@android:style/Theme.Dialog">
         <item name="android:alertDialogStyle">@style/customer_progress_dialog</item>
         <item name="android:progressBarStyleSmall">@style/customer_progress_dialog</item>
         <item name="android:windowBackground">@android:color/transparent</item>
         <item name="android:windowNoTitle">true</item>
         <item name="android:windowIsTranslucent">true</item>
         <item name="android:paddingLeft">10dip</item>  //图片与左边距的距离
         <item name="android:paddingRight">10dip</item> //message与右边距的距离
         <item name="android:textSize">20sp</item>      //message字体的大小
         <item name="android:textColor">@android:color/white</item>  //message字体的颜色
     </style>

@style/customer_progress_dialog 自定义的ProgressDialog style

<style name="customer_progress_dialog" parent="@android:style/Widget.ProgressBar">
          <item name="android:indeterminateDuration">2000</item>
	  <item name="android:fullDark">@drawable/tip2_bg</item>
          <item name="android:topDark">@drawable/tip2_bg</item>
          <item name="android:centerDark">@drawable/tip2_bg</item>
          <item name="android:bottomDark">@drawable/tip2_bg</item>
          <item name="android:fullBright">@drawable/tip2_bg</item>
          <item name="android:topBright">@drawable/tip2_bg</item>
          <item name="android:centerBright">@drawable/tip2_bg</item>
          <item name="android:bottomBright">@drawable/tip2_bg</item>
          <item name="android:bottomMedium">@drawable/tip2_bg</item>
          <item name="android:centerMedium">@drawable/tip2_bg</item>
     </style>

自定义的CustomProgressDialog:

package com.example.android;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;

public class CustomeProgressDialog extends ProgressDialog {

    private Context mContent ;
    
    public CustomeProgressDialog(Context context){
	super(context,R.style.theme_customer_progress_dialog) ;
	mContent = context ;
    }
    
    public CustomeProgressDialog(Context context, int theme) {
	super(context, theme);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setIndeterminateDrawable(mContent.getResources().getDrawable(R.drawable.customer_progess_dialog)) ;
        this.setCanceledOnTouchOutside(false) ;
    }
    
    
    public static CustomeProgressDialog show(Context context,String message){
	 CustomeProgressDialog dialog = new CustomeProgressDialog(context) ;
         dialog.setMessage(message) ;
         dialog.show() ;
         return dialog ;
    }
}


测试代码:

CustomeProgressDialog.show(this,"上传数据中") ;

结果:





























  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
要自定义 volume_dialog,您需要了解以下几个方面: 1. 界面布局:您需要创建一个布局文件,该文件将定义 volume_dialog 的外观和样式。该布局文件通常包括音量滑块、静音按钮和其他控件。 2. 实现音量控制:您需要实现音量控制逻辑,以便在用户调整音量时更新音量滑块的位置,并相应地更新系统音量。 3. 注册广播接收器:您需要注册一个广播接收器,以便在系统音量发生变化时更新您的 volume_dialog。 下面是一个简单的示例,展示如何自定义 volume_dialog: 1. 创建一个新的布局文件,例如 my_volume_dialog.xml。该文件可以包含音量滑块、静音按钮等控件。 2. 创建一个新的 Java 类,例如 MyVolumeDialog。该类应扩展 VolumeDialog 类,并实现音量控制逻辑。 3. 在 MyVolumeDialog 中注册一个广播接收器,以便在系统音量发生变化时更新您的 volume_dialog。 4. 在您的应用程序中使用 MyVolumeDialog 代替系统默认的 volume_dialog。 下面是一些代码示例,展示如何实现自定义 volume_dialog: 在 my_volume_dialog.xml 文件中定义您自己的布局: ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp"> <SeekBar android:id="@+id/volume_seek_bar" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:max="100"/> <Button android:id="@+id/mute_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="静音"/> </LinearLayout> ``` 在 MyVolumeDialog 中扩展 VolumeDialog 并实现音量控制逻辑: ``` public class MyVolumeDialog extends VolumeDialog { private SeekBar mVolumeSeekBar; private Button mMuteButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_volume_dialog); // 获取音量滑块和静音按钮的引用 mVolumeSeekBar = (SeekBar) findViewById(R.id.volume_seek_bar); mMuteButton = (Button) findViewById(R.id.mute_button); // 设置音量滑块的最大值为 100 mVolumeSeekBar.setMax(100); // 设置音量滑块的进度为当前系统音量 AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); mVolumeSeekBar.setProgress(currentVolume); // 注册音量滑块的监听器,以便在用户调整音量时更新系统音量 mVolumeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser) { AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0); } } @Override public void onStartTrackingTouch(SeekBar seekBar) {} @Override public void onStopTrackingTouch(SeekBar seekBar) {} }); // 注册静音按钮的监听器,以便在用户点击时设置系统静音状态 mMuteButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.setStreamMute(AudioManager.STREAM_MUSIC, true); } }); } } ``` 在 MyVolumeDialog 中注册广播接收器,以便在系统音量发生变化时更新您的 volume_dialog: ``` public class MyVolumeDialog extends VolumeDialog { // ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_volume_dialog); // ... // 注册广播接收器,以便在系统音量发生变化时更新您的 volume_dialog IntentFilter filter = new IntentFilter(); filter.addAction("android.media.VOLUME_CHANGED_ACTION"); registerReceiver(mVolumeChangedReceiver, filter); } private BroadcastReceiver mVolumeChangedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")) { // 更新音量滑块的位置 AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); mVolumeSeekBar.setProgress(currentVolume); } } }; } ``` 最后,在您的应用程序中使用 MyVolumeDialog 代替系统默认的 volume_dialog: ``` // 创建 MyVolumeDialog 实例并显示 MyVolumeDialog myVolumeDialog = new MyVolumeDialog(); myVolumeDialog.show(getFragmentManager(), "volume_dialog"); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值