强制性背景信息:我正在建造一个平板电脑应用,供房地产经纪人在引用住宅和建筑物时使用。由于家庭或公寓可以拥有任意数量的房间,我认为建立一个基于标签的解决方案会很好,这个解决方案可以按房间进行,并按需为每个房间创建一个标签。
我已经浏览了几个标签教程,但我发现的所有解决方案都处理了预定义数量的标签,并使用了已弃用的TabHost。
TabHost.TabSpec ourSpec = tabhost.newTabSpec("tag1");
ourSpec.setContent(new TabHost.TabContentFactory()
{
@Override
public View createTabContent(String tag)
{
// Put some GUI stuff here
return null;
}
});
问题:我想重新使用新标签的现有布局,并以某种方式记录到目前为止已创建的标签数量。
答案 0 :(得分:1)
为此我使用了以下代码
TabSpec fifthTabSpec = tabHost.newTabSpec("tid5");
addTab(fifthTabSpec , "",
getResources().getDrawable(R.drawable.icon), new Intent(
A.this, B.class));
这是addTab方法
private void addTab(TabSpec spec, String labelId, Drawable drawable,
Intent intent) {
View tabIndicator = LayoutInflater.from(this).inflate(
R.layout.tab_indicator, getTabWidget(), false); // tab_indicator is a layout for the tab widget as i used custom icon and style
ImageView icon = (ImageView) tabIndicator.findViewById(R.id.icon);
icon.setImageDrawable(drawable);
icon.setScaleType(ImageView.ScaleType.FIT_CENTER);
spec.setIndicator(tabIndicator);
spec.setContent(intent);
tabHost.addTab(spec);
}
这是tab_indicator
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0dip"
android:layout_height="55dip"
android:layout_weight="1"
android:orientation="vertical"
android:weightSum="55" >
<ImageView
android:id="@+id/icon"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="30"
android:adjustViewBounds="false"
android:padding="10dp"
android:background="@drawable/tab_icon_selector" // tab_icon_selector is custom selector
android:src="@drawable/icon" />
希望你能找到这个有用的
答案 1 :(得分:0)
经过大量的研究,终于设法将可行的东西放在一起。
Sankar Ganesh的tutorial非常有用。
MainActivity.java:
package com.example.workingdynamictabexample;
import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TabHost;
@SuppressWarnings("deprecation")
public class MainActivity extends TabActivity
{
private TabHost tabHost;
private int z = 0;
private static final int
ADD_TAB = Menu.FIRST + 11,
DELETE_TAB = Menu.FIRST + 12;
private String Test = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.tabHost = getTabHost();
Intent newRoom = new Intent();
newRoom.setClass(this, RoomActivity.class);
Test = Intent.CATEGORY_LAUNCHER;
Log.d("Test", Test);
tabHost.addTab(
tabHost.newTabSpec("Main")
.setIndicator("New room")
.setContent(newRoom)
);
}
private void addTab()
{
Intent newRoom = new Intent();
newRoom.setClass(this, RoomActivity.class);
tabHost.addTab(
tabHost.newTabSpec("NewRoomTab")
.setIndicator("New room")
.setContent(newRoom)
);
Log.d("z", Integer.toString(z));
++z;
}
// "Boss, we really cannot delete one a'dem tab gubbinz, so we hides 'em."
private void deleteTab()
{
int position = tabHost.getCurrentTab();
Log.d("Position", Integer.toString(position));
Log.d("Z val in delete()", Integer.toString(z));
tabHost.getCurrentTabView().setVisibility(View.GONE);
if (position > 0)
{
tabHost.setCurrentTab(position + 1);
z -= 1;
if (z < 0)
{
z = 0;
}
}
else if (position == 0)
{
tabHost.setCurrentTab(position + 1);
z = 0;
}
else if (position == z)
{
tabHost.setCurrentTab(z - 1);
Log.d("Z value in final", "lol");
Log.d("Pos", Integer.toString(position));
Log.d("Z pos", Integer.toString(z));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
menu.add(Menu.NONE, ADD_TAB, Menu.NONE, "New room")
.setAlphabeticShortcut('a');
return (super.onCreateOptionsMenu(menu));
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case ADD_TAB:
addTab();
return (true);
case DELETE_TAB:
deleteTab();
return (true);
}
return (super.onOptionsItemSelected(item));
}
}
RoomActivity.java:
package com.example.workingdynamictabexample;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
public class RoomActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.tabhost);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
return (super.onCreateOptionsMenu(menu));
}
}
activity_main.xml中:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:tag="tabPane" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</FrameLayout>
</LinearLayout>
</TabHost>
tabhost.xml:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:tag="tabPane"
/>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RelativeLayout
android:id="@+id/tab_room"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/btnAddTab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:onClick="addTab"
android:text="Add room" />
<TextView
android:id="@+id/lblType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="20dp"
android:layout_marginTop="30dp"
android:text="Room type:" />
<Spinner
android:id="@+id/spinnerType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/lblType"
android:layout_marginLeft="20dp"
android:layout_toRightOf="@+id/lblType" />
<TextView
android:id="@+id/lblWidthX"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/lblType"
android:layout_below="@+id/lblType"
android:layout_marginTop="30dp"
android:text="Dimension 1:" />
<TextView
android:id="@+id/lblWidthY"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/lblWidthX"
android:layout_below="@+id/lblWidthX"
android:layout_marginTop="30dp"
android:text="Dimension 2:" />
<EditText
android:id="@+id/txtWidthX"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/lblWidthX"
android:layout_alignBottom="@+id/lblWidthX"
android:layout_alignLeft="@+id/txtWidthY"
android:layout_alignParentRight="true"
android:ems="10" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/txtWidthY"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/lblWidthY"
android:layout_alignBottom="@+id/lblWidthY"
android:layout_alignParentRight="true"
android:layout_toRightOf="@+id/lblWidthY"
android:ems="10" />
<TextView
android:id="@+id/lblFloors"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/lblWidthY"
android:layout_below="@+id/txtWidthY"
android:layout_marginTop="30dp"
android:text="Floors:" />
<EditText
android:id="@+id/txtFloors"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/lblFloors"
android:layout_alignBottom="@+id/lblFloors"
android:layout_alignParentRight="true"
android:layout_toRightOf="@+id/lblFloors"
android:ems="10" />
</RelativeLayout>
</FrameLayout>
</LinearLayout>
</TabHost>