【背景】
折腾:
【记录】Android中在Tab页面的Group中显示各种类型的控件
期间,需要去动态在TAB页面内的Group内,
动态的创建一个个label:value的形式的组合。
并且最好在最开始再加上一个status的图标的前缀:
[status]label: value
【折腾过程】
1.后来看到这个:
Android textview usage as label and value – Stack Overflow
这个很像我需要的:
只是不需要其中的竖杠。
而帖子中是通过静态的xml去实现的,但是我希望是动态创建的。
先去参考试试,看看静态的能否创建出来所需要的效果,如果可以,再考虑改为动态创建。
2.算了,还是自己代码中,随便去试试吧。。
截止目前,还是没有实现出所需要的效果,只是凑合的使用这样的代码,加上自己随便弄点数据:
(1)/res/drawable/group_background.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <!-- <solid android:color="#b4000000" /> <padding android:left="7.0dip" android:top="7.0dip" android:right="7.0dip" android:bottom="7.0dip" /> <corners android:radius="8dp" /> <gradient android:startColor="#FFFF0000" android:endColor="#80FF00FF" android:angle="45"/> <solid android:color="#b4000000" /> <stroke android:width="2.0dip" android:color="#b4ffffff" android:dashWidth="3.0dip" android:dashGap="0.0dip" /> <padding android:left="7.0dip" android:top="7.0dip" android:right="7.0dip" android:bottom="7.0dip" /> <corners android:radius="8.0dip" /> --> <gradient android:startColor="#F7FAFD" android:endColor="#F5F5DC" android:angle="270" /> <stroke android:width="2dp" android:color="#dcdcdc" /> <!--<stroke android:dashGap="2dp" android:dashWidth="5dp" android:width="1dp" android:color="#777777" /> --> <corners android:radius="2dp" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape>
(2)MainActivity.java
import android.app.ActionBar.Tab; import android.app.ActionBar.TabListener; import android.app.Activity; import android.app.FragmentTransaction; import android.app.TabActivity; import android.os.Bundle; import android.app.Fragment; import android.content.Context; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTabHost; import android.util.DisplayMetrics; import android.util.Log; import android.util.TypedValue; import android.view.Display; import android.view.Gravity; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.AnalogClock; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.GridLayout; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TabHost; import android.widget.TabHost.TabSpec; import android.widget.TextView; import android.widget.TabWidget; import android.widget.FrameLayout; public class MainActivity extends FragmentActivity { private FragmentTabHost mTabHost; private View indicator = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final TabHost tabHost = (TabHost)findViewById(R.id.tabHost); tabHost.setup(); final Context tabContext = MainActivity.this; TabSpec tabHart = tabHost.newTabSpec("HART"); tabHart.setIndicator("HART"); tabHart.setContent(new TabHost.TabContentFactory() { public View createTabContent(String tag) { LinearLayout tab1AllGroup = new LinearLayout(tabContext); tab1AllGroup.setLayoutParams( new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); tab1AllGroup.setOrientation(LinearLayout.VERTICAL); tab1AllGroup.setPadding(4, 4, 4, 4); LinearLayout groupPollingAddress = new LinearLayout(tabContext); groupPollingAddress.setLayoutParams( new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); groupPollingAddress.setOrientation(LinearLayout.VERTICAL); groupPollingAddress.setBackgroundResource(R.drawable.group_background); TextView GroupPollingAddressText = new TextView(tabContext); GroupPollingAddressText.setText("---Polling Address---"); groupPollingAddress.addView(GroupPollingAddressText); groupPollingAddress.addView(createLabelValue(tabContext, "PollingAddress", 0)); LinearLayout groupBasicInfo = new LinearLayout(tabContext); groupBasicInfo.setLayoutParams( new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); groupBasicInfo.setOrientation(LinearLayout.VERTICAL); groupBasicInfo.setBackgroundResource(R.drawable.group_background); TextView GroupBasicInformationText = new TextView(tabContext); GroupBasicInformationText.setText("---Basic Information---"); groupBasicInfo.addView(GroupBasicInformationText); groupBasicInfo.addView(createLabelValue(tabContext, "Manufacturer", "Yamatake")); groupBasicInfo.addView(createLabelValue(tabContext, "DeviceType", "ST3000 by Azbil")); groupBasicInfo.addView(createLabelValue(tabContext, "DeviceID", 0x02)); LinearLayout groupRevision = new LinearLayout(tabContext); groupRevision.setLayoutParams( new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); groupRevision.setOrientation(LinearLayout.VERTICAL); groupRevision.setBackgroundResource(R.drawable.group_background); TextView groupRevisionText = new TextView(tabContext); groupRevisionText.setText("---Revision---"); groupRevision.addView(groupRevisionText); groupRevision.addView(createLabelValue(tabContext, "HARTRevision", 5)); groupRevision.addView(createLabelValue(tabContext, "DeviceRevision", 2)); groupRevision.addView(createLabelValue(tabContext, "HardwareRevision", 0)); groupRevision.addView(createLabelValue(tabContext, "SoftwareRevision", 13)); tab1AllGroup.addView(groupPollingAddress); tab1AllGroup.addView(groupBasicInfo); tab1AllGroup.addView(groupRevision); return tab1AllGroup; } }); tabHost.addTab(tabHart); TabSpec tabDevice=tabHost.newTabSpec("Device"); tabDevice.setIndicator("Device"); tabDevice.setContent(new TabHost.TabContentFactory() { public View createTabContent(String tag) { LinearLayout tab1AllGroup = new LinearLayout(tabContext); tab1AllGroup.setLayoutParams( new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); tab1AllGroup.setOrientation(LinearLayout.VERTICAL); tab1AllGroup.setPadding(4, 4, 4, 4); LinearLayout groupDevice = new LinearLayout(tabContext); groupDevice.setLayoutParams( new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); groupDevice.setOrientation(LinearLayout.VERTICAL); groupDevice.setBackgroundResource(R.drawable.group_background); TextView groupDeviceInfo1 = new TextView(tabContext); groupDeviceInfo1.setText("---Device Info 1---"); groupDevice.addView(groupDeviceInfo1); groupDevice.addView(createLabelValue(tabContext, "Message", "This is Message")); groupDevice.addView(createLabelValue(tabContext, "Tag", " This is Tag")); groupDevice.addView(createLabelValue(tabContext, "Descriptor", " This is Descriptor")); groupDevice.addView(createLabelValue(tabContext, "Date", "2014-03-14")); tab1AllGroup.addView(groupDevice); return tab1AllGroup; } }); tabHost.addTab(tabDevice); TabSpec tabProcess=tabHost.newTabSpec("Process"); tabProcess.setIndicator("Process"); tabProcess.setContent(new TabHost.TabContentFactory() { public View createTabContent(String tag) { LinearLayout tab1AllGroup = new LinearLayout(tabContext); tab1AllGroup.setLayoutParams( new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); tab1AllGroup.setOrientation(LinearLayout.VERTICAL); tab1AllGroup.setPadding(4, 4, 4, 4); LinearLayout groupProcessVariable = new LinearLayout(tabContext); groupProcessVariable.setLayoutParams( new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); groupProcessVariable.setOrientation(LinearLayout.VERTICAL); groupProcessVariable.setBackgroundResource(R.drawable.group_background); TextView groupProcessText = new TextView(tabContext); groupProcessText.setText("---Process Variables---"); groupProcessVariable.addView(groupProcessText); groupProcessVariable.addView(createLabelValue(tabContext, "PV", "PV value")); groupProcessVariable.addView(createLabelValue(tabContext, "PVUnit", " PVUnit value")); groupProcessVariable.addView(createLabelValue(tabContext, "SV", "SV value")); groupProcessVariable.addView(createLabelValue(tabContext, "SVUnit", "SVUnit value")); groupProcessVariable.addView(createLabelValue(tabContext, "TV", "TV value")); groupProcessVariable.addView(createLabelValue(tabContext, "TVUnit", "TVUnit value")); groupProcessVariable.addView(createLabelValue(tabContext, "QV", "QV value")); groupProcessVariable.addView(createLabelValue(tabContext, "QVUnit", "QVUnit value")); tab1AllGroup.addView(groupProcessVariable); return tab1AllGroup; } }); tabHost.addTab(tabProcess); TabSpec tabDiagnostic=tabHost.newTabSpec("Diagnostic"); tabDiagnostic.setIndicator("Diagnostic"); tabDiagnostic.setContent(new TabHost.TabContentFactory() { public View createTabContent(String tag) { LinearLayout tab1AllGroup = new LinearLayout(tabContext); tab1AllGroup.setLayoutParams( new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); tab1AllGroup.setOrientation(LinearLayout.VERTICAL); tab1AllGroup.setPadding(4, 4, 4, 4); LinearLayout groupDiagnostic = new LinearLayout(tabContext); groupDiagnostic.setLayoutParams( new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); groupDiagnostic.setOrientation(LinearLayout.VERTICAL); groupDiagnostic.setBackgroundResource(R.drawable.group_background); TextView groupDiagnosticInfo1 = new TextView(tabContext); groupDiagnosticInfo1.setText("---Diagnostic Info 1---"); groupDiagnostic.addView(groupDiagnosticInfo1); groupDiagnostic.addView(createLabelValue(tabContext, "ExtendedFieldDeviceStatus", "ExtendedFieldDeviceStatus value")); groupDiagnostic.addView(createLabelValue(tabContext, "StandardizedStatus0", " StandardizedStatus0 value")); groupDiagnostic.addView(createLabelValue(tabContext, "AnalogChannelSaturated", "AnalogChannelSaturated value")); groupDiagnostic.addView(createLabelValue(tabContext, "StandardizedStatus2", "StandardizedStatus2 value")); groupDiagnostic.addView(createLabelValue(tabContext, "StandardizedStatus3", "StandardizedStatus3 value")); groupDiagnostic.addView(createLabelValue(tabContext, "AnalogChannelFixed", "AnalogChannelFixed value")); tab1AllGroup.addView(groupDiagnostic); return tab1AllGroup; } }); tabHost.addTab(tabDiagnostic); } private View createLabelValue(Context context, String label, Object value){ LinearLayout fieldNameValueLayout = new LinearLayout(context); fieldNameValueLayout.setLayoutParams( new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); fieldNameValueLayout.setOrientation(LinearLayout.HORIZONTAL); TextView manufactureLabel = new TextView(context); manufactureLabel.setText(label + ": "); fieldNameValueLayout.addView(manufactureLabel); TextView manufactureValuel = new TextView(context); manufactureValuel.setText(value.toString()); fieldNameValueLayout.addView(manufactureValuel); return fieldNameValueLayout; }
生成如下的效果:
和:
【总结】
总之是:
group内部的每个label和value部分,还是没有实现真正想要的,对其的效果。
看来要等以后抽空再去想办法,通过GridLayout去实现Group内部的对其的效果了。