繁体   English   中英

Xamarin.Forms:项目文本 alignment 在选择器上

[英]Xamarin.Forms: items text alignment on a picker

有没有办法在选择器的项目文本上设置正确的 alignment? 像这样:[1]: https://i.stack.imgur.com/hxf8P.png

我创建了以下自定义渲染器,但它没有对齐项目:

[assembly: ExportRenderer(typeof(PickerExtended), typeof(PickerCustomRenderer))]
namespace Vendo.Droid.Renderers
{
 public class PickerCustomRenderer : Xamarin.Forms.Platform.Android.AppCompat.PickerRenderer
 {
     public PickerCustomRenderer(Context context) : base(context) { } 

     protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
     {
         base.OnElementChanged(e);

         if (Control != null && e.NewElement != null)
         {
             switch (e.NewElement.HorizontalTextAlignment)
             {
                 case Xamarin.Forms.TextAlignment.Center:
                     Control.Gravity = GravityFlags.CenterHorizontal;
                     break;
                 case Xamarin.Forms.TextAlignment.End:
                     Control.Gravity = GravityFlags.End;
                     break;
             }
         }
     }
 }
} ```

您可以创建自己的选择器对话框并设置项目的gravity

Xaml:

   <Picker x:Name="picker"
    Title="Select"
    TitleColor="Red">
        <Picker.ItemsSource>
            <x:Array Type="{x:Type x:String}">
                <x:String>10,38</x:String>
                <x:String>12,535</x:String>
                <x:String>11,67</x:String>
                <x:String>10,665</x:String>

            </x:Array>
        </Picker.ItemsSource>
    </Picker>

自定义渲染器:

[assembly: ExportRenderer(typeof(Picker), typeof(CustomPickerRenderer))]
namespace App1.Droid
{

public class CustomPickerRenderer : PickerRenderer
{
    AlertDialog listDialog;
    string[] items;
    public CustomPickerRenderer(Context context) : base(context)
    {

    }
    protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
    {
        base.OnElementChanged(e);



        if (Control != null)
        {
            Control.Click += Control_Click; ;
        }

    }

    private void Control_Click(object sender, EventArgs e)
    {
        Picker model = Element;
        items = model.Items.ToArray();
        AlertDialog.Builder builder = new AlertDialog.Builder(this.Context);
        builder.SetTitle(model.Title ?? "");
        builder.SetNegativeButton("Cancel", (s, a) =>
        {
            Control?.ClearFocus();
            builder = null;
        });           

        Android.Views.View view = LayoutInflater.From(this.Context).Inflate(Resource.Layout.listview, null);
        Android.Widget.ListView listView = view.FindViewById<Android.Widget.ListView>(Resource.Id.listView1);

        MyAdapter myAdapter = new MyAdapter(items, Element.SelectedIndex);
        listView.Adapter = myAdapter;
        listView.ItemClick += ListView_ItemClick;
        builder.SetView(view);
        listDialog = builder.Create();
       
        listDialog.Show();
 
    }

    private void ListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
    {
        Control.Text = items[e.Position];
        Element.SelectedIndex = e.Position;
        Console.WriteLine(items[e.Position]);
        listDialog.Dismiss();
        listDialog = null;
    }   
}

class MyAdapter : BaseAdapter
{
    private string[] items;
    private int selectedIndex;

    public MyAdapter(string[] items)
    {
        this.items = items;
    }

    public MyAdapter(string[] items, int selectedIndex) : this(items)
    {
        this.selectedIndex = selectedIndex;
    }

    public override int Count => items.Length;

    public override Java.Lang.Object GetItem(int position)
    {
        return items[position];
    }

    public override long GetItemId(int position)
    {
        return position;
    }

    public override Android.Views.View GetView(int position, Android.Views.View convertView, ViewGroup parent)
    {
        if (convertView == null)
        {
            convertView = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.listview_item, null);
        }
        TextView textView = convertView.FindViewById<TextView>(Resource.Id.textView1);
        textView.Text = items[position];
        return convertView;
    }
}
}

listview.xml :您可以在 android 项目的Resources/layout中创建。

<?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">
    <ListView
       android:id="@+id/listView1"           
        android:dividerHeight="2dp"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"/> 
</LinearLayout>

listview_item.xml :您可以在 android 项目的Resources/layout中创建。

<?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">
   <TextView
      android:id="@+id/textView1"
       android:gravity="right" 
      android:layout_width="match_parent"
      android:layout_height="wrap_content"/>
</LinearLayout>

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM