Xamarin Android仿真器怪异的UI

时间:2018-12-18 03:50:22

标签: android xamarin xamarin.forms xamarin.android

我正在学习Xamarin并遵循 Mosh Code 中的教程,但是遇到了一个问题,该问题可能与该教程的年代以及对Xamarin / Android UI所做的更改有关自发布以来。

在本教程的这一部分中,我只是拥有一个在常规堆栈布局中水平放置的堆栈布局,但是由于某种原因,水平按钮的按钮过大。

package com.miya.takeaway.common.util.orika;

import com.miya.takeaway.common.util.orika.converter.ConverterHelper;
import ma.glasnost.orika.MapperFactory;
import ma.glasnost.orika.converter.ConverterFactory;
import ma.glasnost.orika.impl.DefaultMapperFactory;
import ma.glasnost.orika.metadata.ClassMapBuilder;
import org.apache.commons.collections4.CollectionUtils;

import java.util.Collections;
import java.util.List;

public class OrikaUtils {

    private static MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();


    public static <T> List<T> map(List<?> objects, Class<T> target) {
        if (CollectionUtils.isEmpty(objects)) {
            return Collections.EMPTY_LIST;
        }
        return mapperFactory.getMapperFacade().mapAsList(objects.toArray(), target);
    }
}

这是我的代码,它应该产生this one (correct)

但是它产生的是:enter image description here

我也不知道为什么。任何指导表示赞赏。

1 个答案:

答案 0 :(得分:1)

如果您确实希望Android中的按钮看起来像在iOS中一样。您可以使用Custom Renderer在android中设置属性。

  

表格

创建按钮

using System;
using Xamarin.Forms;
namespace app1
{
  public class MyButton:Button
  {
    public MyButton()
    {

    }
  }
}

在xaml中

<ContentPage.Padding>
    <OnPlatform x:TypeArguments="Thickness" iOS="0, 20, 0, 0">
    </OnPlatform>
</ContentPage.Padding>
<StackLayout>
    <StackLayout Padding="10">
        <Label Text="generic username" />
    </StackLayout>
    <Image Source="http://lorempixel.com/1920/1080/nature/3/" />
    <StackLayout Orientation="Horizontal" HorizontalOptions="Start" Spacing="20"  Padding="10, 0">

        <local:MyButton Text="Like" />
        <local:MyButton Text="Comment" />
        <local:MyButton Text="Share" />

    </StackLayout>
    <StackLayout Padding="10">
        <BoxView HeightRequest="1" Color="#f0f0f0" />
        <Label Text="700 likes" FontAttributes="Bold" />
        <Label TextColor="#444" Text="This is a shot." />
    </StackLayout>
</StackLayout> 
  

在Android项目中

资源-> 布局(例如ButtonRenderer.axml)中创建新的布局文件

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

<Button 
 xmlns:android="http://schemas.android.com/apk/res/android"  
 android:orientation="vertical"     
 android:layout_width="wrap_content"     
 android:layout_height="wrap_content"     
 android:minHeight="0dp"     
 android:minWidth="0dp"      
 android:background="@android:color/transparent"     >

</Button>

在CustomRenderer中

using app1;
using app1.Droid;
using Android.Content;
using Android.Graphics;
using Android.Widget;
using Android.Views;

[assembly:ExportRenderer(typeof(MyButton),typeof(MyButtonRenderer))]
namespace app1.Droid
{
  public class MyButtonRenderer:ButtonRenderer
  {
    readonly Android.Widget.Button button;

    public MyButtonRenderer(Context context) : base(context) 
    {
      button = (Android.Widget.Button)LayoutInflater.From(context).Inflate(Resource.Layout.ButtonRenderer, null);
      button.SetTextColor(Android.Graphics.Color.Blue);
    }

    protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
    {
        base.OnElementChanged(e);

        if (Control != null) { SetNativeControl(button); }
    }

  }
}
  

您可以根据需要在axml文件中设置按钮的样式。