使用ImageView和TextView的AlertDialog

时间:2016-12-14 10:53:54

标签: android xamarin alertdialog nullreferenceexception

我想用ImageView和TextView制作一个AlertDialog。 我写了这个:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp">
    <ImageView
        android:id="@+id/imgCustomToast"
        android:layout_width="170dp"
        android:layout_height="220dp"
        android:background="@drawable/ycp"
        android:gravity="center_horizontal"
        android:layout_gravity="center"
        android:layout_marginRight="10dp" />
    <TextView
        android:id="@+id/txtCustomToast"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="C#"
        android:gravity="center_horizontal"
        android:layout_gravity="center"
        android:textSize="20sp"/>
</LinearLayout>

MainActivity:

public class MainActivity : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.Main);
        Button button = FindViewById<Button>(Resource.Id.MyButton);
        button.Click += delegate
        {
            AlertDialog.Builder alertadd = new AlertDialog.Builder(this);
            LayoutInflater factory = LayoutInflater.From(this);
            View view = factory.Inflate(Resource.Layout.sample, null);
            alertadd.SetView(view);
            alertadd.SetPositiveButton("To Close", (senderAlert, args) =>
            {
                Toast.MakeText(this, "Closed", ToastLength.Short).Show();
            });
            alertadd.Show();
        };
    }
}

我想在MainActivity中更改textview的大小,字体和文本:

    TextView textView = FindViewById<TextView>(Resource.Id.txtCustomToast);
    string str = "sample text";
    textView.Text = str;
    Typeface typeP = Typeface.CreateFromAsset(this.Assets, "fonts/BLOTUS.TTF");
    textView.SetTypeface(typeP, TypefaceStyle.Normal);
    textView.SetTextSize(Android.Util.ComplexUnitType.Sp, 18);

但是我看到了这个错误:

  

System.NullReferenceException

如何以编程方式更改textview的大小,字体和文本?

4 个答案:

答案 0 :(得分:2)

你做错了,你可以访问下面的TextView

更改此行

 TextView textView = FindViewById<TextView>(Resource.Id.txtCustomToast);

到这个

 TextView textView = view.FindViewById<TextView>(Resource.Id.txtCustomToast);

答案 1 :(得分:1)

您需要使用view的实例查找Alert Dialog,如下所示。

TextView textView = view.FindViewById<TextView>(Resource.Id.txtCustomToast);

答案 2 :(得分:1)

    View view = factory.Inflate(Resource.Layout.sample, null);
    TextView textView = view.findViewById<TextView>(Resource.Id.txtCustomToast);
    string str = "sample text";
    textView.setText(str);

答案 3 :(得分:0)

调用此方法,显示AlertDialog ImageViewTextView

private void showDialog(Context context) {

        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("Title");
        builder.setMessage("Message");

        LinearLayout linearLayout = new LinearLayout(context);
        linearLayout.setOrientation(LinearLayout.HORIZONTAL);
        ImageView imageView = new ImageView(context);
        TextView textView = new TextView(context);
        linearLayout.addView(imageView);
        linearLayout.addView(textView);

        builder.setCancelable(false);
        builder.setView(linearLayout);

        builder.setPositiveButton("OK",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //ok
                    }
                });


        builder.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // negative button logic
                    }
                });

        AlertDialog dialog = builder.create();
        // display dialog
        dialog.show();
    }