要为 material 设计 Android 应用选择哪种 Xamarin 项目类型?
Which Xamarin project type to choose for a material design Android app?
如果我想构建一流的 material 设计 Android 应用程序,我应该选择哪种 Xamarin 项目类型?
Xamarin.Android 还是跨平台 Xamarin 应用?
我更喜欢 "cross-platform" 应用程序,因为我想稍后再定位 iOS,但如果缺少某些东西,那么我更喜欢使用 Xamarin.Android 并考虑代码稍后分享。
Xamarin.Forms 或在 XML?
中手动定义 android UI
Xamarin.Forms 应用程序是否包含制作一流 "material design" 应用程序所需的所有细粒度控制?
Xamarin.Forms可以做到这些吗?
如果您创建一个新的 Xamarin Forms prj,您的 Android prj 应该准备好 Material Design
首先,将您的 Target 框架设置为 Android6.0 或更高版本。
那么您应该应用新的主题并自定义工具栏和选项卡。
最后就是把MainActivity改成
public class MainActivity : FormsAppCompatActivity
和
protected override void OnCreate(Bundle bundle)
{
FormsAppCompatActivity.ToolbarResource = Resource.Layout.toolbar;
FormsAppCompatActivity.TabLayoutResource = Resource.Layout.tabs;
base.OnCreate(bundle);
Forms.Init(this, bundle);
LoadApplication(new App());
}
在 "Visual C#" > "Cross-Platform" 中选择 "Blank Xaml App"
您可以看到像这样的两个选项 Blank Xaml App(Xamarin.Forms Portable) 和 Blank Xaml App(Xamarin.Forms Shared)。您可以根据项目要求选择其中之一。这两个选项都使用 material 设计创建 android 应用程序项目。
您可以选择跨平台或 android 特定。此时没关系,因为您之后可以切换到 material 设计。
您只需按照 link 中所述配置您的 android 应用。
这意味着:
设置颜色(如果你直接设置颜色,你可以不用)
Resources/values/colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="primary">#2196F3</color>
<color name="primaryDark">#1976D2</color>
<color name="accent">#FFC107</color>
<color name="window_background">#F5F5F5</color>
</resources>
设置你的风格
Resources/values/style.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="MyTheme.Base">
</style>
<style name="MyTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primaryDark</item>
<item name="colorAccent">@color/accent</item>
<item name="android:windowBackground">@color/window_background</item>
<item name="windowActionModeOverlay">true</item>
</style>
</resources>
Resources/values-v21/style.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="MyTheme.Base">
<!--If you are using MasterDetailPage you will want to set these, else you can leave them out-->
<!--<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>-->
</style>
</resources>
在Properties/AndroidManifest中添加这个。xml
<application android:label="AppName" android:icon="@drawable/icon" android:theme="@style/MyTheme">
自定义工具栏和选项卡
Resources/layout/tabs.axml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.TabLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:tabIndicatorColor="@android:color/white"
app:tabGravity="fill"
app:tabMode="fixed" />
Resources/layout/toolbar.axml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_scrollFlags="scroll|enterAlways" />
然后在您的主要 activity 中,您继承自 FormsAppCompatActivity
然后您像这样修改您的 oncreate 覆盖
protected override void OnCreate(Bundle bundle)
{
FormsAppCompatActivity.ToolbarResource = Resource.Layout.toolbar;
FormsAppCompatActivity.TabLayoutResource = Resource.Layout.tabs;
base.OnCreate(bundle);
Forms.Init(this, bundle);
LoadApplication(new App());
}
如果我想构建一流的 material 设计 Android 应用程序,我应该选择哪种 Xamarin 项目类型?
Xamarin.Android 还是跨平台 Xamarin 应用?
我更喜欢 "cross-platform" 应用程序,因为我想稍后再定位 iOS,但如果缺少某些东西,那么我更喜欢使用 Xamarin.Android 并考虑代码稍后分享。
Xamarin.Forms 或在 XML?
中手动定义 android UIXamarin.Forms 应用程序是否包含制作一流 "material design" 应用程序所需的所有细粒度控制?
Xamarin.Forms可以做到这些吗?
如果您创建一个新的 Xamarin Forms prj,您的 Android prj 应该准备好 Material Design
首先,将您的 Target 框架设置为 Android6.0 或更高版本。
那么您应该应用新的主题并自定义工具栏和选项卡。
最后就是把MainActivity改成
public class MainActivity : FormsAppCompatActivity
和
protected override void OnCreate(Bundle bundle)
{
FormsAppCompatActivity.ToolbarResource = Resource.Layout.toolbar;
FormsAppCompatActivity.TabLayoutResource = Resource.Layout.tabs;
base.OnCreate(bundle);
Forms.Init(this, bundle);
LoadApplication(new App());
}
在 "Visual C#" > "Cross-Platform" 中选择 "Blank Xaml App"
您可以看到像这样的两个选项 Blank Xaml App(Xamarin.Forms Portable) 和 Blank Xaml App(Xamarin.Forms Shared)。您可以根据项目要求选择其中之一。这两个选项都使用 material 设计创建 android 应用程序项目。
您可以选择跨平台或 android 特定。此时没关系,因为您之后可以切换到 material 设计。
您只需按照 link 中所述配置您的 android 应用。
这意味着: 设置颜色(如果你直接设置颜色,你可以不用) Resources/values/colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="primary">#2196F3</color>
<color name="primaryDark">#1976D2</color>
<color name="accent">#FFC107</color>
<color name="window_background">#F5F5F5</color>
</resources>
设置你的风格 Resources/values/style.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="MyTheme.Base">
</style>
<style name="MyTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primaryDark</item>
<item name="colorAccent">@color/accent</item>
<item name="android:windowBackground">@color/window_background</item>
<item name="windowActionModeOverlay">true</item>
</style>
</resources>
Resources/values-v21/style.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="MyTheme.Base">
<!--If you are using MasterDetailPage you will want to set these, else you can leave them out-->
<!--<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>-->
</style>
</resources>
在Properties/AndroidManifest中添加这个。xml
<application android:label="AppName" android:icon="@drawable/icon" android:theme="@style/MyTheme">
自定义工具栏和选项卡 Resources/layout/tabs.axml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.TabLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:tabIndicatorColor="@android:color/white"
app:tabGravity="fill"
app:tabMode="fixed" />
Resources/layout/toolbar.axml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_scrollFlags="scroll|enterAlways" />
然后在您的主要 activity 中,您继承自 FormsAppCompatActivity
然后您像这样修改您的 oncreate 覆盖
protected override void OnCreate(Bundle bundle)
{
FormsAppCompatActivity.ToolbarResource = Resource.Layout.toolbar;
FormsAppCompatActivity.TabLayoutResource = Resource.Layout.tabs;
base.OnCreate(bundle);
Forms.Init(this, bundle);
LoadApplication(new App());
}