Android用DialogFragment实现iphone样式的圆角对话框

Android实现iphone样式的对话框,主要是借助shape,corner元素方法。

下面的circular_corner_dialog.xml文件定义了一个圆角矩形。corner元素指定了圆角矩形的圆角半径,而gradient元素则指定了色彩渐变的方向以及起始颜色。当然也可以使用shape创建其它各种图形,如椭圆、线条以及环等,并设置不同的视觉风格。

res/drawable/circular_corner_dialog.xml

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <gradient
                android:startColor="@android:color/white"
                android:endColor="@android:color/white">
            </gradient>
            <corners
                android:topLeftRadius="15dp"
                android:topRightRadius="15dp"
                android:bottomLeftRadius="15dp"
                android:bottomRightRadius="15dp">
            </corners>
        </shape>
    </item>
</selector>

fragment_dialog_circular_corner.xml文件时自定义对话框MyDialogFragment的界面布局文件,创建MyDialogFragment实例时加载该界面布局。  

res/layout/fragment_dialog_circular_corner.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:gravity="center"
    >

    <LinearLayout
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:orientation="horizontal"
        android:background="@drawable/circular_corner_dialog"
        android:layout_gravity="center">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            />
        </LinearLayout>
</LinearLayout>

主Activity类MyActivity的fragment视图容器布局文件。

res/layout/activity_myactivity.xml

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></FrameLayout>

自定义圆角对话框。

src/.../MyDialogFragment.java

import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v4.app.DialogFragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;

public class MyDialogFragment extends DialogFragment {
    View view;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        view=inflater.inflate(R.layout.fragment_dialog_circular_corner,container,false);
        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        return view;
    }
}

托管Fragment的主Activity类。

src/.../MyActivity.java

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.kanebay.dcide.R;

public class MyActivity extends FragmentActivity {

    private MyDialogFragment myDialogFragment;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login_notice);
        if(savedInstanceState==null){
            //
            getSupportFragmentManager()
                    .beginTransaction()
                    .add(R.id.fragment_container, myDialogFragment)
                    .commit();
        }else {
            myDialogFragment=(MyDialogFragment)getSupportFragmentManager()
                    .findFragmentById(R.id.fragment_container);
        }
    }
}

 

Android用DialogFragment实现iphone样式的圆角对话框,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。