我想创建一个自定义对话框,如下所示

我尝试过以下的事情.
我创建了AlertDialog.Builder的子类,并使用了自定义标题和自定义内容视图并使用了它,但结果并不像预期的那样.
另一种尝试是继承DialogFragment并在onCreateDialog中自定义对话框,但结果不是预期的.
然后我尝试使用普通的Dialog类.结果并不像预期的那样.
在所有三种情况下,问题是当我忽略标题视图时,对话框的大小不是预期的,当我使用标题视图时,结果是内容视图周围有一个粗边框(实际上看起来很糟糕).现在我脑子里有两个问题......
我怎样才能做到这一点?由于我已经尝试了很多东西,因此我们将更加赞赏直接的答案.
在Android应用程序中显示错误或警告对话框的最佳方法是什么?
编辑 Android开发人员文档建议我们应该使用DialogFragments或Dialogs向用户显示错误/警报消息.但有一次他们说......
提示:如果需要自定义对话框,则可以将"活动"显示为对话框,而不是使用"对话框API".只需创建一个活动,并将其主题设置为清单元素中的Theme.Holo.Dialog.
那是什么意思?使用Activity只是为了显示错误消息是不是太多了?
我有一个自定义的BttomSheetDialogFragment,我希望在底部视图的顶部有圆角
这是我的自定义类,它让我希望从底部显示我的布局
View mView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.charge_layout, container, false);
initChargeLayoutViews();
return mView;
}
Run Code Online (Sandbox Code Playgroud)
我也有这个xml资源文件作为背景:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<corners android:topRightRadius="35dp"
android:topLeftRadius="35dp"
/>
<solid android:color="@color/white"/>
<padding android:top="10dp"
android:bottom="10dp"
android:right="16dp"
android:left="16dp"/>
Run Code Online (Sandbox Code Playgroud)
但问题是,当我将此资源文件设置为我的Layout的根元素的背景时,角落仍然没有舍入
我不能使用下面的代码:
this.getDialog().getWindow().setBackgroundDrawableResource(R.drawable.charge_layout_background);
Run Code Online (Sandbox Code Playgroud)
因为它覆盖BottomSheetDialog的默认背景,并且在我的底视图上方不会有任何半透明的灰色
android material-design bottom-sheet material-components material-components-android
我正在创建一个自定义片段对话框,其圆角和布局不会填满屏幕宽度(我更喜欢它只是包装其内容).
这是我rounded_dialog.xml的drawable文件夹,由我的Custom调用,ThemeWithCorners作为对话框的背景.我还尝试将其设置为线性布局的背景,该布局创建其内容但没有任何作用.
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<solid android:color="@android:color/white"/>
<corners android:radius="20dp"
/>
</shape>
Run Code Online (Sandbox Code Playgroud)
这就是我调用对话框的方式:
final String FTAG = "TAG_FRAGMENT_DIALOG_CALENDAR";
dialog = (CalendarDialog) fm.findFragmentByTag(FTAG);
ft = fm.beginTransaction();
if (dialog != null)
{
ft.remove(dialog);
}
dialog = CalendarDialog.newInstance(this);
dialog.setCancelable(true);
ft.add(dialog, FTAG);
ft.show(dialog);
ft.commit();
Run Code Online (Sandbox Code Playgroud)
在对话框的onCreate方法中我设置了样式和主题:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.ThemeWithCorners);
}
Run Code Online (Sandbox Code Playgroud)
这是onCreateView方法:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
getDialog().setCanceledOnTouchOutside(true);
v = (MyCalendar)inflater.inflate(R.layout.calendar_dialog, container, true)
return v;
}
Run Code Online (Sandbox Code Playgroud)
我也尝试将此添加到onCreateDialog方法,因为SO上的其他答案建议但不起作用:
@Override
public Dialog onCreateDialog(Bundle …Run Code Online (Sandbox Code Playgroud) 我一直试图用圆角制作我的警报对话但不知何故我无法做到.我试过,但我失败了.我试着关注这个博客http://blog.stylingandroid.com/archives/271并根据它制作了我的风格.
顺便说一句,现在就加我的问题.我的一些新发现.上面链接中的代码在2.3.3(GB)上工作正常但在ICS中根本不起作用.一些改变使代码破裂.
我想避免创建9个补丁图像,因此我使用的是形状.9补丁图像是我将尝试的最后一件事.我知道android警报对话框样式正在使用9补丁图像.在抛出这个问题之前我已经看过了.
/res/values/themes.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="@android:style/Theme.Dialog">
<item name="android:alertDialogStyle">@style/dialog</item>
</style>
</resources>
Run Code Online (Sandbox Code Playgroud)
/res/values/styles.xml
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AppTheme" parent="android:Theme.Light" />
<style name="myImageView">
<!-- 3dp so the background border to be visible -->
<item name="android:padding">3dp</item>
<item name="android:background">@drawable/image_drawable</item>
<item name="android:scaleType">fitCenter</item>
</style>
<style name="dialog">
<item name="android:fullDark">@drawable/dialog_body</item>
<item name="android:topDark">@drawable/dialog_title</item>
<item name="android:centerDark">@drawable/dialog_body</item>
<item name="android:bottomDark">@drawable/dialog_footer</item>
<item name="android:fullBright">@drawable/dialog_body</item>
<item name="android:centerBright">@drawable/dialog_body</item>
<item name="android:topBright">@drawable/dialog_title</item>
<item name="android:bottomBright">@drawable/dialog_footer</item>
<item name="android:bottomMedium">@drawable/dialog_footer</item>
<item name="android:centerMedium">@drawable/dialog_body</item>
</style>
</resources>
Run Code Online (Sandbox Code Playgroud)
/res/drawable/dialog_title.xml
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetBottom="-1dp">
<shape android:shape="rectangle">
<solid android:color="#FFFFFF" />
<corners android:topLeftRadius="5dp" android:topRightRadius="5dp" /> …Run Code Online (Sandbox Code Playgroud) 我已经在stackoverflow上读到了这个问题但很遗憾没有找到正确的答案.
我使用ToggleButton,它在渲染窗口中显示以下错误:
The graphics preview in the layout editor may not be accurate:
- Different corner sizes are not supported in Path.addRoundRect. (Ignore for this session)
- Path.isConvex is not supported. (Ignore for this session)
Run Code Online (Sandbox Code Playgroud)
终端显示以下错误消息:
E/dalvikvm: Could not find class 'android.widget.ThemedSpinnerAdapter', referenced from method android.support.v7.widget.AppCompatSpinner$DropDownAdapter.<init>
Run Code Online (Sandbox Code Playgroud)
当我在渲染窗口中将api级别设置为19而不是23时,将不会出现"渲染问题"窗口,但在使用Android 4.4.2的设备上运行时,应用程序中仍会出现错误.
这是我简单的ToggleButton:
<ToggleButton
android:id="@+id/editToggleKunde6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textOn="@string/kunde_bearbeiten_txt1"
android:textOff="@string/kunde_bearbeiten_txt2"
android:checked="true"
/>
Run Code Online (Sandbox Code Playgroud)
谢谢你的任何想法!
我已经解决了一些问题,但没有解决我的问题.
我创建了一个自定义DialogFragment.和根元素dialog is cardView.我设置cardCornerRadius的cardView.
然后我尝试设置透明对话框,因为背景颜色也随之显示.
然后我尝试设置对话框主题
<style name="PauseDialog" parent="@style/Theme.AppCompat.Light.Dialog">
<!-- TTheme.AppCompat.Translucent-->
<item name="android:windowAnimationStyle">@style/PauseDialogAnimation</item>
<!--<item name="android:windowBackground">@android:color/transparent</item>-->
<item name="android:windowBackground">@color/transparent</item>
<item name="android:colorBackgroundCacheHint">@android:color/transparent</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowTitleStyle">@null</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:background">@android:color/transparent</item>
</style>
Run Code Online (Sandbox Code Playgroud)
背景仍然存在.然后我也试过了
dialog.getWindow().setBackgroundDrawable(
new ColorDrawable(Color.TRANSPARENT));
Run Code Online (Sandbox Code Playgroud)
但仍然对话框有与之相关的背景.
有什么工作吗?我怎么能摆脱它.
我创建了一个DialogFragment和onCreateDialog
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(),
R.style.PauseDialog);
setStyle(DialogFragment.STYLE_NO_FRAME, R.style.PauseDialog);
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个Layout带有圆角的圆角,我曾经shape帮助我这样做,但是当添加圆角时,背景白色也会保持不变。
同样重要的是要注意,我将它layout.xml用作 ContentView 用于Dialog:
final Dialog MyDialog = new Dialog(this);
MyDialog.setContentView(R.layout.layout.xml);
Run Code Online (Sandbox Code Playgroud)
这是我的layout.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="300dp"
android:background="@drawable/round_corners"
android:layout_height="200dp">
<Button
android:id="@+id/play_song"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginEnd="32dp"
android:text="Play"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<Button
android:id="@+id/delete_song"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginStart="28dp"
android:text="Delete"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
和可绘制的round_corners.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/gray_text"/>
<stroke android:width="3dp" android:color="@color/colorBlack" />
<corners android:radius="20dp"/>
<padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)
这是我得到的结果:
如何去除白色边角?
我正在使用喷气背包导航从片段过渡到细节片段。
我需要帮助在显示它的片段上呈现细节片段。
请参阅下面的照片以了解我想要实现的目标:
我还在导航图中的动画上使用基本的淡入/淡出作为输入退出。
这是我得到的结果:
如何设置过渡以便细节片段显示在呈现视图上?
这是我所有的进展:
底部导航菜单
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/fragment_tab1"
android:title="Tab 1"/>
<item
android:id="@+id/fragment_tab2"
android:title="Tab 2"/>
<item
android:id="@+id/fragment_tab3"
android:title="Tab 3"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
导航图
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/nav_graph"
app:startDestination="@id/fragment_tab1">
<fragment android:id="@+id/fragment_tab1" android:name="com.example.navgraphfragmentmodal.Tab1" android:label="fragment_tab1"
tools:layout="@layout/fragment_tab1">
<action android:id="@+id/toModal" app:destination="@id/modalFragment"/>
</fragment>
<fragment android:id="@+id/fragment_tab2" android:name="com.example.navgraphfragmentmodal.Tab2" android:label="fragment_tab2"
tools:layout="@layout/fragment_tab2"/>
<fragment android:id="@+id/fragment_tab3" android:name="com.example.navgraphfragmentmodal.Tab3"
android:label="fragment_tab3" tools:layout="@layout/fragment_tab3"/>
<fragment android:id="@+id/modalFragment" android:name="com.example.navgraphfragmentmodal.ModalFragment"
android:label="fragment_modal" tools:layout="@layout/fragment_modal"/>
</navigation>
Run Code Online (Sandbox Code Playgroud)
主活动.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navHostFragment = supportFragmentManager.findFragmentById(R.id.navigation_host_fragment) as NavHostFragment?
NavigationUI.setupWithNavController(bottom_navigation_view, navHostFragment!!.navController)
supportActionBar?.setDisplayShowHomeEnabled(true)
} …Run Code Online (Sandbox Code Playgroud) android android-fragments android-navigation android-transitions android-jetpack
如何设计带圆角和透明关闭按钮的自定义警报对话框?
android android-alertdialog material-design material-components material-components-android
android ×9
java ×2
material-components-android ×2
bottom-sheet ×1
constraints ×1
shape ×1
xml ×1