我正在尝试为我的应用程序创建一个 GUI,例如 对于我的状态选项卡,我尝试在相对布局中使用表布局,但它不像这个模型。但是非常糟糕
数据来自数据库,GUI 是静态的,即根据从数据库读取的数据更改值,但布局应保持不变。
我想我必须使用某种自定义列表视图。在这些碎片中。另外,我在第一个选项卡中有一个刷新操作项。
如果有人可以建议我这样做是否可行并指导我正确的方向,我将不胜感激。
仅供参考,此应用程序仅适用于 ICS 及更高版本,因此我不会使用 ActionBarSherlock 等库。
我正在尝试为我的应用程序创建一个 GUI,例如 对于我的状态选项卡,我尝试在相对布局中使用表布局,但它不像这个模型。但是非常糟糕
数据来自数据库,GUI 是静态的,即根据从数据库读取的数据更改值,但布局应保持不变。
我想我必须使用某种自定义列表视图。在这些碎片中。另外,我在第一个选项卡中有一个刷新操作项。
如果有人可以建议我这样做是否可行并指导我正确的方向,我将不胜感激。
仅供参考,此应用程序仅适用于 ICS 及更高版本,因此我不会使用 ActionBarSherlock 等库。
起初,这个问题对我来说似乎有点抽象,不是一个具体的问题。但后来它变成了重建的挑战。;) 以下是您可以开始的方式:
首先,为我们的自定义表格视图创建一个自定义属性:
res/values/attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<attr name="label" format="string" />
<declare-styleable name="AverageTableView">
<attr name="label" />
</declare-styleable>
</resources>
定义我们要使用的样式:
res/values/styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="Table">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">fill_parent</item>
<item name="android:shrinkColumns">*</item>
<item name="android:stretchColumns">*</item>
</style>
<style name="Cell">
<item name="android:gravity">center</item>
<item name="android:textSize">10sp</item>
</style>
<style name="Cell.Header">
<item name="android:textStyle">bold</item>
</style>
<style name="Divider">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">1dip</item>
<item name="android:layout_margin">6dip</item>
<item name="android:background">?android:attr/listDivider</item>
</style>
</resources>
为自定义表格视图创建布局:
res/layout/average_table.xml
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TableRow android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/table_header"
android:layout_span="3"
android:layout_marginLeft="6dip"
android:padding="3dip"
android:textColor="@android:color/holo_blue_light"
android:textSize="10sp" />
</TableRow>
<View
android:layout_height="2dip"
android:background="@android:color/holo_blue_light" />
<TableRow android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="6dip">
<TextView style="@style/Cell.Header"
android:text="Today" />
<TextView style="@style/Cell.Header"
android:text="This Month" />
<TextView style="@style/Cell.Header"
android:text="All Time" />
</TableRow>
<TableRow android:layout_width="fill_parent"
android:layout_height="wrap_content">
<View style="@style/Divider" />
<View style="@style/Divider" />
<View style="@style/Divider" />
</TableRow>
<TableRow android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/day_value"
style="@style/Cell" />
<TextView android:id="@+id/month_value"
style="@style/Cell" />
<TextView android:id="@+id/all_value"
style="@style/Cell" />
</TableRow>
<TableRow android:layout_width="fill_parent"
android:layout_height="wrap_content">
<View style="@style/Divider" />
<View style="@style/Divider" />
<View style="@style/Divider" />
</TableRow>
</merge>
创建自定义表格视图:
src/com/test/app/AverageTableView.java
package com.test.app;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TextView;
import android.widget.TableLayout;
public class AverageTableView extends TableLayout {
private TextView mHeader;
private TextView mDay;
private TextView mMonth;
private TextView mAll;
public AverageTableView( Context pContext ) {
this( pContext, null );
}
public AverageTableView( Context pContext, AttributeSet pAttrs ) {
super( pContext, pAttrs );
initView( pContext, pAttrs );
}
private void initView( Context pContext, AttributeSet pAttrs ) {
View.inflate( pContext, R.layout.average_table, this );
mHeader = ( TextView ) findViewById( R.id.table_header );
mDay = ( TextView ) findViewById( R.id.day_value );
mMonth = ( TextView ) findViewById( R.id.month_value );
mAll = ( TextView ) findViewById( R.id.all_value );
TypedArray a = pContext.getTheme().obtainStyledAttributes(
pAttrs, R.styleable.AverageTableView, 0, 0 );
try {
String label = a.getString( R.styleable.AverageTableView_label );
setHeaderLabel( label == null ? "Header" : label );
} finally {
a.recycle();
}
}
public String getHeaderLabel() {
return mHeader.getText().toString();
}
public void setHeaderLabel( String pLabel ) {
mHeader.setText( pLabel );
}
public String getDayValue() {
return mDay.getText().toString();
}
public void setDayValue( String pValue ) {
mDay.setText( pValue );
}
public String getMonthValue() {
return mMonth.getText().toString();
}
public void setMonthValue( String pValue ) {
mMonth.setText( pValue );
}
public String getAllValue() {
return mAll.getText().toString();
}
public void setAllValue( String pValue ) {
mAll.setText( pValue );
}
}
然后我们在片段布局中使用我们的自定义表格视图:
res/layout/detail.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res/com.test.app"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="12dip" >
<com.test.app.AverageTableView android:id="@+id/cpu_table"
style="@style/Table"
custom:label="CPU Usage Average" />
<com.test.app.AverageTableView android:id="@+id/ram_table"
style="@style/Table"
custom:label="RAM Usage Average" />
</LinearLayout>
最后,在我们的片段中填写表格:
src/com/test/app/DetailFragment.java
package com.test.app;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class DetailFragment extends Fragment {
AverageTableView mCPU;
AverageTableView mRAM;
@Override
protected void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
}
@Override
public View onCreateView( LayoutInflater pInflater, ViewGroup pContainer, Bundle pSavedInstanceState ) {
View view = pInflater.inflate( R.layout.detail, pContainer, false );
mCPU = ( AverageTableView ) view.findViewById( R.id.cpu_table );
mRAM = ( AverageTableView ) view.findViewById( R.id.ram_table );
mCPU.setDayValue( "77%" );
mCPU.setMonthValue( "77%" );
mCPU.setAllValue( "64%" );
mRAM.setDayValue( "88%" );
mRAM.setMonthValue( "56%" );
mRAM.setAllValue( "64%" );
return view;
}
}
希望这可以帮助!