请有人可以帮助我。
我已经尝试了四天,以使突出显示的列表视图项目的默认橙色变为其他任何颜色。
我试图将项目的主题设置为Holo,虽然也很轻巧,但是无论我做什么都无法正确实现。
我试图像这样在MainActivity中设置它
[Activity(Label = "Proj", Icon = "@drawable/icon", Theme = "@style/Theme.Holo.Light.DarkActionBar", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
我试图像这样在AndroidManifest文件中设置它:
<application android:label="com.proj.app" android:theme="@style/Theme.Holo.Light.DarkActionBar"></application>
我尝试弄乱这些版本并将它们设置为最高版本(9&8.1),并尝试将minsdk和targetdks设置为最新版本。
什么都没用。请有人帮我。
我也尝试实现自定义渲染器,但也无法正确实现。
我要做的就是使下面的列表视图中突出显示的行不是橙色。
<ListView ItemsSource="{Binding Items}" x:Name="StudentsView" HasUnevenRows="True" SeparatorVisibility="Default">
<ListView.Header>
<StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" >
<Image Source="studentsicon.png" Margin="6,10,6,10" ></Image>
<Frame BackgroundColor="#222222">
<Label Text="Select a student" FontSize="16" TextColor="White"></Label>
</Frame>
<ActivityIndicator x:Name="actStudents" IsVisible="False" IsRunning="False" Color="#DF304F" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" />
</StackLayout>
</ListView.Header>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Vertical" HorizontalOptions="FillAndExpand">
<Frame BackgroundColor="#222222" CornerRadius="0" Margin="10,10,10,0">
<Frame.GestureRecognizers>
</Frame.GestureRecognizers>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="90"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackLayout Grid.Column="0" Grid.Row="0" Orientation="Vertical" VerticalOptions="Fill" HorizontalOptions="FillAndExpand">
<Image Source="{Binding Photo}" Aspect="AspectFit" VerticalOptions="FillAndExpand"></Image>
</StackLayout>
<StackLayout Grid.Column="1" Grid.Row="0" Orientation="Vertical" VerticalOptions="Fill" MinimumHeightRequest="400" HorizontalOptions="FillAndExpand">
<Label Text="{Binding FName}" FontSize="20" HorizontalTextAlignment="Center" TextColor="White"></Label>
</StackLayout>
</Grid>
</Frame>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
答案 0 :(得分:0)
创建扩展视单元格,如下所示:
public class ExtendedViewCell : ViewCell
{
public static readonly BindableProperty SelectedBackgroundColorProperty =
BindableProperty.Create("SelectedBackgroundColor",
typeof(Color),
typeof(ExtendedViewCell),
Color.Default);
public Color SelectedBackgroundColor
{
get { return (Color)GetValue(SelectedBackgroundColorProperty); }
set { SetValue(SelectedBackgroundColorProperty, value); }
}
}
Android自定义渲染器 渲染单元格时,该单元格捕获Android视图单元格的当前(未选择的默认主题)颜色,然后每当Android视图单元格的IsSelected属性从false更改为true时,设置视图单元格背景的颜色。 。然后,当它向后翻转时,将其重置为原始捕获的颜色。
很显然,如果您需要在列表中选择多个项目,这可能会变得稍微复杂一些,但这已经是我寻找解决方案所需要的。
assembly: ExportRenderer(typeof(ExtendedViewCell), typeof(ExtendedViewCellRenderer))]
namespace
xamformsdemo.Droid.CustomRenderers
{
public class ExtendedViewCellRenderer : ViewCellRenderer
{
private Android.Views.View _cellCore;
private Drawable _unselectedBackground;
private bool _selected;
protected override Android.Views.View GetCellCore(Cell item,
Android.Views.View convertView,
ViewGroup parent,
Context context)
{
_cellCore = base.GetCellCore(item, convertView, parent, context);
_selected = false;
_unselectedBackground = _cellCore.Background;
return _cellCore;
}
protected override void OnCellPropertyChanged(object sender, PropertyChangedEventArgs args)
{
base.OnCellPropertyChanged(sender, args);
if (args.PropertyName == "IsSelected")
{
_selected = !_selected;
if (_selected)
{
var extendedViewCell = sender as ExtendedViewCell;
_cellCore.SetBackgroundColor(extendedViewCell.SelectedBackgroundColor.ToAndroid());
}
else
{
_cellCore.SetBackground(_unselectedBackground);
}
}
}
}
}
答案 1 :(得分:0)
为视图单元创建Android渲染器,并重写GetCellCore方法。下面的示例代码:
<mat-grid-list cols="4" rowHeight="100px">
<mat-grid-tile id="left-sidebar">
<!-- Left Sidebar-->
</mat-grid-tile>
<mat-grid-tile id="main-content" colspan="2">
<!-- Main Content -->
<app-post></app-post>
<router-outlet></router-outlet>
</mat-grid-tile>
<mat-grid-tile id="right-sidebar">
<!-- Right Sidebar-->
</mat-grid-tile>
</mat-grid-list>
答案 2 :(得分:0)
我无需在应用中自定义渲染器即可完成此操作,方法如下:
我的 style.xml 文件(将其放入Resources / values文件夹中,并使用AndroidResource构建操作):
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<color name="FancyCyanColorOfMine">#00ffff</color>
<style name="Theme.Main" parent="@android:style/Theme.Holo.Light">
<item name="android:colorActivatedHighlight">@color/FancyCyanColorOfMine</item>
</style>
</resources>
然后我在MainActivity声明中使用这样的主题:
[Activity(Theme = "@style/Theme.Main", [OTHER STUFF OF YOURS])]
public sealed class MainActivity : Xamarin.Forms.Platform.Android.FormsApplicationActivity
{
...
}
对于诸如“ colorActivatedHighlight”之类的有色事物,还有许多其他标签,您可以在以下Android文档中进行跟踪:https://developer.android.com/reference/android/R.attr,也许只是搜索单词“ color”