android - AlertDialog জন্য থিম পরিবর্তন কিভাবে




themes (9)

কেউ আমাকে সাহায্য করতে পারে যদি আমি বিস্মিত ছিল। আমি একটি কাস্টম AlertDialog তৈরি করার চেষ্টা করছি। এটি করার জন্য, আমি শৈলী.এক্সএমএল কোড নিম্নলিখিত লাইন যোগ

<resources>
 <style name="CustomAlertDialog" parent="android:Theme.Dialog.Alert">
  <item name="android:windowBackground">@drawable/color_panel_background</item>
 </style>
</resources>
  • color_panel_background.9.png drawable ফোল্ডারে অবস্থিত। এটি Android SDK Res ফোল্ডারেও উপলব্ধ।

নিম্নলিখিত প্রধান কার্যকলাপ।

package com.customdialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;

public class CustomDialog extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        this.setTheme(R.style.CustomAlertDialog);
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("HELLO!");
        builder .setCancelable(false)
          .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
               //MyActivity.this.finish();
           }
       })
       .setNegativeButton("No", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
               //dialog.cancel();
           }
       });

        AlertDialog alertdialog = builder.create();
        alertdialog.show();
    }
}

একটি এলার্টডিয়ালগ থিম প্রয়োগ করার জন্য, আমি বর্তমান প্রসঙ্গে থিম সেট করতে হয়েছিল।

যাইহোক, আমি কাস্টমাইজড অ্যালার্টডিয়ালগ দেখানোর জন্য অ্যাপ্লিকেশনটি দেখতে পাচ্ছি না। কেউ কি আমাকে এটার ব্যাপারে সাহায্য করতে পারবে?


Dialog.java (Android সোর্স) -এ একটি কনটেক্সট থিমওয়্যার ব্যবহার করা হয়। তাই আপনি ধারণাটি অনুলিপি করতে পারেন এবং এমন কিছু করতে পারেন:

AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.AlertDialogCustom));

এবং তারপর শৈলী এটি আপনি চান চান:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AlertDialogCustom" parent="@android:style/Theme.Dialog">
        <item name="android:textColor">#00FF00</item>
        <item name="android:typeface">monospace</item>
        <item name="android:textSize">10sp</item>
    </style>
</resources>

অ্যারে ওয়াল্টিনের সমাধান ভাল দেখাচ্ছে, যদিও আমি এখনো এটি পরীক্ষা করে দেখিনি। যদি আপনি এটি কাজ করতে সমস্যা হয়ে থাকেন তবে আরেকটি সমাধান রয়েছে .... AlertDialog.Builder প্রসারিত AlertDialog.Builder এবং প্রকৃত ডায়ালগের পাঠ্য / শিরোনাম / ভিউ সেট করার জন্য সমস্ত পদ্ধতিগুলি (উদাহরণস্বরূপ সেট সেট, setView , সেট setView ইত্যাদি) ওভাররাইড করুন তবে ডায়ালগের দৃশ্যের মধ্যে একটি নতুন দৃশ্য তৈরি করতে সেখানে সবকিছু করুন। তারপর আপনি দয়া করে সবকিছু শৈলী মুক্ত।

স্পষ্ট করার জন্য, যতদূর পিতা-মাতা শ্রেণির উদ্বিগ্ন, দৃশ্যটি সেট করা হয় এবং অন্য কিছুই নয়।

যতদূর আপনার কাস্টম বর্ধিত শ্রেণী সংশ্লিষ্ট, সবকিছুই সেই দৃশ্যের মধ্যে সম্পন্ন করা হয়।


আমি এই AlertDialog থিম সম্পর্কিত সমস্যাটি এখানে বর্ণিত হিসাবে AlertDialog 1.6 ব্যবহার AlertDialog : http://markmail.org/message/mj5ut56irkrkc4nr

আমি নিম্নলিখিত কাজ করে সমস্যা সমাধান:

  new AlertDialog.Builder(
  new ContextThemeWrapper(context, android.R.style.Theme_Dialog))

আশাকরি এটা সাহায্য করবে.


আমি এক্সেল স্টাইল ফাইলগুলির সাথে অ্যালার্টডিয়ালগের লেআউট কনফিগার করতে কীভাবে আমার ব্লগে একটি article লিখেছি। প্রধান সমস্যাটি আপনাকে বিভিন্ন বিন্যাসের পরামিতিগুলির জন্য বিভিন্ন শৈলী সংজ্ঞাগুলির প্রয়োজন। এখানে হাইলাইট লাইট প্ল্যাটফর্ম সংস্করণ 19 এর অ্যালার্টডিয়ালগ স্টাইলের উপর ভিত্তি করে একটি বয়লারপ্লেট রয়েছে যা স্টাইল ফাইলের জন্য আদর্শ লেআউট দিকগুলির একটি গুচ্ছকে আচ্ছাদন করবে যেমন পাঠ্য মাপ এবং পটভূমি রং।

<style name="AppBaseTheme" parent="android:Theme.Holo.Light">
    ...
    <item name="android:alertDialogTheme">@style/MyAlertDialogTheme</item>
    <item name="android:alertDialogStyle">@style/MyAlertDialogStyle</item>
    ...
</style>

<style name="MyBorderlessButton">
    <!-- Set background drawable and text size of the buttons here -->
    <item name="android:background">...</item>
    <item name="android:textSize">...</item>
</style>

<style name="MyButtonBar">
    <!-- Define a background for the button bar and a divider between the buttons here -->
    <item name="android:divider">....</item>
    <item name="android:dividerPadding">...</item>
    <item name="android:showDividers">...</item>
    <item name="android:background">...</item>
</style>

<style name="MyAlertDialogTitle">
    <item name="android:maxLines">1</item>
    <item name="android:scrollHorizontally">true</item>
</style>

<style name="MyAlertTextAppearance">
    <!-- Set text size and color of title and message here -->
    <item name="android:textSize"> ... </item>
    <item name="android:textColor">...</item>
</style>

<style name="MyAlertDialogTheme">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowTitleStyle">@style/MyAlertDialogTitle</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
    <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:textAppearanceMedium">@style/MyAlertTextAppearance</item>
    <!-- If you don't want your own button bar style use
            @android:style/Holo.Light.ButtonBar.AlertDialog
            and
            ?android:attr/borderlessButtonStyle
         instead of @style/MyButtonBar and @style/MyBorderlessButton -->
    <item name="android:buttonBarStyle">@style/MyButtonBar</item>
    <item name="android:buttonBarButtonStyle">@style/MyBorderlessButton</item>
</style>

<style name="MyAlertDialogStyle">
    <!-- Define background colors of title, message, buttons, etc. here -->
    <item name="android:fullDark">...</item>
    <item name="android:topDark">...</item>
    <item name="android:centerDark">...</item>
    <item name="android:bottomDark">...</item>
    <item name="android:fullBright">...</item>
    <item name="android:topBright">...</item>
    <item name="android:centerBright">...</item>
    <item name="android:bottomBright">...</item>
    <item name="android:bottomMedium">...</item>
    <item name="android:centerMedium">...</item>
</style>

আমি এটির সাথে সংগ্রাম করছিলাম - আপনি আপনার android:alertDialogStyle="@style/AlertDialog" সাহায্যে ডায়ালগের ব্যাকগ্রাউন্ডটি স্টাইল করতে পারেন android:alertDialogStyle="@style/AlertDialog" , তবে এটি আপনার যে কোনও টেক্সট সেটিংসকে উপেক্ষা করে। @ রেফ্লেক্সর বলেছেন যে এটি হানিকম্বের আগে SDK এর সাথে সম্পন্ন করা যাবে না (ভালভাবে আপনি Reflection ব্যবহার করতে পারেন)।

আমার সমাধান, সংক্ষেপে, উপরে ব্যবহার করে ডায়ালগের ব্যাকগ্রাউন্ডটি স্টাইল করা হয়েছিল, তারপরে একটি কাস্টম শিরোনাম এবং সামগ্রীর দৃশ্য সেট করুন (SDK এর মতো একই লেআউট ব্যবহার করে)।

আমার আবর্জনা:

import com.mypackage.R;

import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomAlertDialogBuilder extends AlertDialog.Builder {

    private final Context mContext;
    private TextView mTitle;
    private ImageView mIcon;
    private TextView mMessage;

    public CustomAlertDialogBuilder(Context context) {
        super(context);
        mContext = context; 

        View customTitle = View.inflate(mContext, R.layout.alert_dialog_title, null);
        mTitle = (TextView) customTitle.findViewById(R.id.alertTitle);
        mIcon = (ImageView) customTitle.findViewById(R.id.icon);
        setCustomTitle(customTitle);

        View customMessage = View.inflate(mContext, R.layout.alert_dialog_message, null);
        mMessage = (TextView) customMessage.findViewById(R.id.message);
        setView(customMessage);
    }

    @Override
    public CustomAlertDialogBuilder setTitle(int textResId) {
        mTitle.setText(textResId);
        return this;
    }
    @Override
    public CustomAlertDialogBuilder setTitle(CharSequence text) {
        mTitle.setText(text);
        return this;
    }

    @Override
    public CustomAlertDialogBuilder setMessage(int textResId) {
        mMessage.setText(textResId);
        return this;
    }

    @Override
    public CustomAlertDialogBuilder setMessage(CharSequence text) {
        mMessage.setText(text);
        return this;
    }

    @Override
    public CustomAlertDialogBuilder setIcon(int drawableResId) {
        mIcon.setImageResource(drawableResId);
        return this;
    }

    @Override
    public CustomAlertDialogBuilder setIcon(Drawable icon) {
        mIcon.setImageDrawable(icon);
        return this;
    }

}

alert_dialog_title.xml (এসডিকে থেকে নেওয়া)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >
    <LinearLayout
            android:id="@+id/title_template"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_vertical"
            android:layout_marginTop="6dip"
            android:layout_marginBottom="9dip"
            android:layout_marginLeft="10dip"
            android:layout_marginRight="10dip">

            <ImageView android:id="@+id/icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="top"
                android:paddingTop="6dip"
                android:paddingRight="10dip"
                android:src="@drawable/ic_dialog_alert" />
            <TextView android:id="@+id/alertTitle"
                style="@style/?android:attr/textAppearanceLarge"
                android:singleLine="true"
                android:ellipsize="end"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>
        <ImageView android:id="@+id/titleDivider"
            android:layout_width="fill_parent"
            android:layout_height="1dip"
            android:scaleType="fitXY"
            android:gravity="fill_horizontal"
            android:src="@drawable/divider_horizontal_bright" />
</LinearLayout>

alert_dialog_message.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/scrollView"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingTop="2dip"
            android:paddingBottom="12dip"
            android:paddingLeft="14dip"
            android:paddingRight="10dip">
    <TextView android:id="@+id/message"
                style="?android:attr/textAppearanceMedium"
                android:textColor="@color/dark_grey"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:padding="5dip" />
</ScrollView>

তারপরে আপনার ডায়ালগ তৈরি করতে CustomAlertDialogBuilder পরিবর্তে CustomAlertDialogBuilder ব্যবহার করুন, এবং স্বাভাবিক হিসাবে setMessage setTitle এবং setMessage setTitle কল করুন।


এটি বিল্ডারের সেট ভিউ () ব্যবহার করে সহজেই করা যেতে পারে। আপনি আপনার পছন্দের কোনও দৃশ্য তৈরি করতে এবং বিল্ডারের মধ্যে ফিড তৈরি করতে পারেন। এই ভাল কাজ করে। আমি একটি কাস্টম TextView ব্যবহার করি যা ডায়ালগ বিল্ডার দ্বারা উপস্থাপিত হয়। আমি বার্তা সেট না এবং এই স্থান আমার custome textview রেন্ডার ব্যবহার করা হয়।


এই ব্যবহার কাস্টম ডায়ালগ এবং এখানে আপনার প্রয়োজন অনুযায়ী কাস্টমাইজ করার জন্য ভাল উপায় কাস্টম ডায়ালগ উদাহরণ .....

public class CustomDialogUI {
Dialog dialog;
Vibrator vib;
RelativeLayout rl;

@SuppressWarnings("static-access")
public void dialog(final Context context, String title, String message,
        final Runnable task) {
    dialog = new Dialog(context);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.custom);
    dialog.setCancelable(false);
    TextView m = (TextView) dialog.findViewById(R.id.message);
    TextView t = (TextView) dialog.findViewById(R.id.title);
    final Button n = (Button) dialog.findViewById(R.id.button2);
    final Button p = (Button) dialog.findViewById(R.id.next_button);
    rl = (RelativeLayout) dialog.findViewById(R.id.rlmain);
    t.setText(bold(title));
    m.setText(message);
    dialog.show();
    n.setText(bold("Close"));
    p.setText(bold("Ok"));
    // color(context,rl);
    vib = (Vibrator) context.getSystemService(context.VIBRATOR_SERVICE);
    n.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            vib.vibrate(15);
            dialog.dismiss();
        }
    });
    p.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            vib.vibrate(20);
            dialog.dismiss();
            task.run();
        }
    });
}
 //customize text style bold italic....
public SpannableString bold(String s) {
    SpannableString spanString = new SpannableString(s);
    spanString.setSpan(new StyleSpan(Typeface.BOLD), 0,
            spanString.length(), 0);
    spanString.setSpan(new UnderlineSpan(), 0, spanString.length(), 0);
    // spanString.setSpan(new StyleSpan(Typeface.ITALIC), 0,
    // spanString.length(), 0);
    return spanString;
}

}

এখানে এক্সএমএল লেআউট হয়

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00000000"
>

<RelativeLayout
    android:id="@+id/rlmain"
    android:layout_width="fill_parent"
    android:layout_height="150dip"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:background="#569CE3" >

    <RelativeLayout
        android:id="@+id/relativeLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginLeft="25dip"
        android:layout_marginTop="10dip" >

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:text="Are you Sure?"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#ffffff"
            android:textSize="13dip" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/relativeLayout2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/relativeLayout1"
        android:layout_alignRight="@+id/relativeLayout1"
        android:layout_below="@+id/relativeLayout1"
        android:layout_marginTop="5dip" >
    </RelativeLayout>

    <ProgressBar
        android:id="@+id/process"
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="3dip"
        android:layout_marginTop="3dip" />

    <RelativeLayout
        android:id="@+id/relativeLayout3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/relativeLayout2"
        android:layout_below="@+id/relativeLayout2"
        android:layout_toLeftOf="@+id/process" >

        <TextView
            android:id="@+id/message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:text="Medium Text"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#ffffff"
            android:textSize="13dip"/>

    </RelativeLayout>

    <Button
        android:id="@+id/next_button"
        android:layout_width="90dip"
        android:layout_height="35dip"
        android:layout_alignParentBottom="true"
        android:textColor="@drawable/button_text_color"
         android:background="@drawable/blue_button"
         android:layout_marginBottom="5dp"
           android:textSize="10dp"

        android:layout_alignRight="@+id/relativeLayout3"
        android:text="Okay" />

    <Button
        android:id="@+id/button2"
        android:text="Cancel"
        android:textColor="@drawable/button_text_color"
        android:layout_width="90dip"
        android:layout_height="35dip"
        android:layout_marginBottom="5dp"
         android:background="@drawable/blue_button"
         android:layout_marginRight="7dp"
        android:textSize="10dp"
        android:layout_alignParentBottom="true"
        android:layout_toLeftOf="@+id/next_button"
         />

</RelativeLayout>


কাস্টম ডায়ালগের জন্য:

super(context,R.style.<dialog style>) পরিবর্তে শুধু super(context,R.style.<dialog style>) কল করুন

public class MyDialog extends Dialog
{
    public MyDialog(Context context)
    {
       super(context, R.style.Theme_AppCompat_Light_Dialog_Alert)
    }
}


AlertDialog জন্য:

শুধু এই কনস্ট্রাকটরটির সাথে alertDialog তৈরি করুন:

 new AlertDialog.Builder(
 new ContextThemeWrapper(context, android.R.style.Theme_Dialog))

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title");
builder.setMessage("Description");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();






alert