我试图确定一个包含每行不同布局的单个ListView的最佳方法.我知道如何创建自定义行+自定义数组适配器以支持整个列表视图的自定义行,但是如何在ListView中实现许多不同的行样式?
我目前正在使用XAML设计一个Windows 8商店应用程序,但我有一个小的尺寸问题.我有一个带有DataTemple的ListView.
我的ListView和DataTemplate的代码如下:
<ListView x:Name="listPageItems"
Grid.Row="1"
SelectionMode="Extended"
IsSwipeEnabled="False"
ItemsSource="{Binding Mode=OneWay, Source={StaticResource items}}"
ItemTemplate="{StaticResource NavigationItemTemplate}"
ScrollViewer.VerticalScrollBarVisibility="Visible">
</ListView>
<DataTemplate x:Key="NavigationItemTemplate">
<Grid Height="75">
<Grid.RowDefinitions>
<RowDefinition Height="1.6*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Rectangle Fill="White" />
<Rectangle Fill="{StaticResource SSEGreenBrush}"
Grid.Row="1" />
<Border BorderThickness="2"
BorderBrush="{StaticResource SSEGreenBrush}"
Grid.RowSpan="2" />
<TextBlock x:Name="textTitle"
Text="{Binding ClientName}"
Style="{StaticResource TitleTextStyle}"
Foreground="{StaticResource SSEBlueBrush}"
Margin="10,5,5,5" />
<StackPanel Orientation="Horizontal"
Grid.Row="1"
HorizontalAlignment="Stretch">
<TextBlock Text="Last Edit :"
Style="{StaticResource SubtitleTextStyle}"
Foreground="{StaticResource SSEBlueBrush}"
Margin="3,0,0,3"
VerticalAlignment="Center" />
<TextBlock Text="SurveyDate"
Style="{StaticResource SubtitleTextStyle}"
Foreground="{StaticResource SSEBlueBrush}"
Margin="3,0,0,3"
VerticalAlignment="Center" />
</StackPanel>
</Grid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
列表视图位于网格列中,其固定宽度为240. …
我有一个ListViewItem
我正在申请一个Style
,我想把一个虚线灰色线作为底部Border
.
我怎么能在WPF中这样做?我只能看到纯色画笔.
我有一个ListView
地方,我在一个单独的XML文件中定义了每个项目的布局.在这个文件中,我包含了一个RatingBar
和一个EditText
.
我已经以编程方式创建了7-8个项目ListView
.当我滚动它们时,它似乎是非常错误的.这里有些例子:
如果我将焦点设置到EditText
第一行然后向下滚动,则其他行中的ListView
随机EditTexts
将具有焦点.似乎是EditText
在焦点消失后的下一个消失得到了焦点.也许这是故意的,但是,作为一个用户,它似乎很奇怪.
如果我将焦点设置为a EditText
,接收虚拟键盘,键入内容,然后单击虚拟键盘上的"完成"按钮,EditText
一旦虚拟键盘消失,它将清空.
有时,当我点击一个EditText
,接收一个虚拟键盘并开始输入字母时,一旦我输入它们,这些字母就会消失.
当我点击一个EditText
,虚拟键盘显示自己,但EditText
失去焦点,我必须EditText
再次点击.
尽管我已经设置了RatingBar
到focusable="false"
,如果我将我的滚轮,它仍然抓住重点.
我的一个问题是,当我在虚拟键盘中键入一个字符时,所有可见的列表项都会重新绘制(并且由于文本EditText
被设置为某些数据,这是空的,它会被清除.我不明白为什么Android会每次键入一个字符时都决定重新绘制列表.
这是我用来绘制它们的XML.它们是白色气泡,带有灰色边框,还有一些文字,一个RatingBar
和一个EditText
内部:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="10dip"
android:paddingBottom="10dip"
android:paddingLeft="15dip"
android:paddingRight="15dip"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="2dip"
android:background="@drawable/shape_outer">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="2dip"
android:background="@drawable/shape_inner">
<TextView
android:id="@+id/rating_category"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/dark_gray"
android:textStyle="bold"
android:layout_marginBottom="10dip" />
<RatingBar …
Run Code Online (Sandbox Code Playgroud) 当我ListViewItem
突出显示时,我希望文本变为白色.我怎么定义这个?
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:color="@color/testcolor1"/>
<item android:state_pressed="true" android:state_enabled="false" android:color="@color/testcolor2" />
<item android:state_enabled="false" android:color="@color/testcolor3" />
<item android:color="@color/testcolor5"/>
</selector>
Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中有一个列表视图(这是xml布局):
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/arrayList"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textFilterEnabled="true"
android:scrollbars="vertical"
android:drawSelectorOnTop="true">
</ListView>
Run Code Online (Sandbox Code Playgroud)
我的列表View中的每个项目都由两个TextView组成:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/row_container"
android:padding="5px" android:layout_height="wrap_content"
android:background="@color/white" android:shrinkColumns="0">
<TableRow>
<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_below="@+id/
description"
android:id="@+id/description"
android:textColor="@color/black"
android:scrollHorizontally="true"
android:singleLine="true"></TextView>
</TableRow>
<TableRow>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/result"
android:textColor="@color/grey"
android:maxLines="1"
android:scrollHorizontally="true"></TextView>
</TableRow>
</TableLayout>
Run Code Online (Sandbox Code Playgroud)
我正在以这种方式从ArrayAdapter填充我的listView:
public class Matches extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//set layout
setContentView(R.layout.list_layout);
// obtain reference to listview
ListView listView = …
Run Code Online (Sandbox Code Playgroud) 我有一个ListView,它处于singleChoice模式.我想要的只是在侧面显示一个RadioButton,当点击高亮显示它被选中时,当点击另一个时,一个返回到未选择状态,新的一个被选中.为什么这么难?这不应该是这么复杂.我已经花了DAYS寻找合适的答案而且我什么也没找到,所以我希望以清晰简洁的方式提出要求.
我对listview的布局(R.layout.view_orders):
<?xml version="1.0" encoding="utf-8"?>
<ListView
android:choiceMode="singleChoice"
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="@drawable/list_divider"
android:dividerHeight="1px"
android:focusable="false"
android:focusableInTouchMode="false"
android:cacheColorHint="#00000000">
</ListView>
Run Code Online (Sandbox Code Playgroud)
我的自定义行(R.layout.orders_row):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:app="http://schemas.android.com/apk/res/com.xxx.xxxxxx"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="6dip">
<com.xxx.xxxxxx.VerticalLabelView
app:text="SHORT"
app:textColor="#666"
app:textSize="14sp"
android:id="@+id/state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true" />
<TextView
android:id="@+id/quantity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/state"
android:layout_centerVertical="true"
android:gravity="center"
android:textSize="40sp"
android:layout_margin="2dip"
android:minWidth="30dip"
android:textColor="#555" />
<RelativeLayout
android:layout_toRightOf="@id/quantity"
android:layout_centerVertical="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/instrument"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="#333"
android:layout_marginLeft="2dip"
android:layout_marginRight="2dip"
/>
<TextView
android:id="@+id/deets"
android:layout_below="@id/instrument"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="16sp"
android:textColor="#888" …
Run Code Online (Sandbox Code Playgroud) 即使我知道它不理想 - 我需要以编程方式填充listView(无论出于何种原因).
我在标记中声明我的列:
<ListView.View>
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Path=Name}"/>
<GridViewColumn Header="Value" DisplayMemberBinding="{Binding Path=Value}"/>
</GridView>
</ListView.View>
Run Code Online (Sandbox Code Playgroud)
我在代码中添加这样的项目(它显然是在循环中):
MyData data = getDataItem(index); //< -- whatever
ListViewItem item = new ListViewItem();
item.DataContext = data;
this.myListView.Items.Add(item);
Run Code Online (Sandbox Code Playgroud)
MyData定义为:
public class MyData
{
public string Name { get; set; }
public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
正在添加项目(我可以看到行),但我看不到任何内容.
任何人都有任何线索?
任何帮助赞赏!
如何隐藏ListView中的项目或至少将其高度设置为零?
我已经尝试将View的可见性设置为GONE,但它仍然保持项目的空间(高度).
我想在listview中更改Item的/ Row的高度.
我找遍了那里,我想通,为了改变高度,我需要使用LBS_OWNERDRAWFIXED
或MeasureItem
或类似的东西.
问题是我不知道该做什么以及如何使用它.
任何人都可以帮助我吗?
编辑:
我不能使用ImageList黑客,因为我使用SmallImageList是真实的,我需要从ImageList图像大小不同的行高.
谢谢!
listviewitem ×10
listview ×8
android ×6
wpf ×2
border ×1
c# ×1
colors ×1
populate ×1
radio-button ×1
row-height ×1
styles ×1
visibility ×1
windows-8 ×1
winrt-xaml ×1