在iPhone中,我们可以创建一个具有标签栏的视图,并使其成为应用程序的根视图,然后使用标签栏浏览子视图.
Android中最接近这个的方法是什么?
是否使用选项卡式控件?但这包括只使用一项活动.
在Android中使用的方法是什么方法以类似于iPhone的方式创建一个带有导航控件的活动到其他活动?
我需要一些帮助来刷新我的应用程序中的一个活动.我正在使用标签主机活动并连接到Web服务并从我的一个子活动中下载一些数据.当我在我的子活动中按下同步按钮时,我正在开始一个不在标签主机中的新活动,当同步完成后,它将返回到它的父项(子活动).我想要实现的是当我返回它时刷新活动.当我通过互联网查看时,我发现最好的选择就是使用startActivityForResult,但我真的不明白如何使用它,以及当我从完成的活动中收到结果时如何刷新活动.
如果有人能帮助我,我会很高兴.谢谢!
编辑:
我正在使用此代码,它甚至没有显示登录 onActivityResult
MyCollectionId.class:
Intent intent = new Intent(MyCollectionId.this, Synchronization.class);
intent.putExtra("process", 2);
startActivityForResult(intent, 1);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK){
Log.e("","OnActivityResult");
Intent refresh = new Intent(this, MyCollectionId.class);
startActivity(refresh);
this.finish();
}
}
Run Code Online (Sandbox Code Playgroud)
Synchronization.class:
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
setResult(RESULT_OK,intent);
finish();
Run Code Online (Sandbox Code Playgroud) 试图更改tabhost文本颜色,在此代码中我可以更改tabhost背景颜色(不是文本颜色)
tabHost.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) {
tabHost.getTabWidget().getChildAt(i)
.setBackgroundColor(Color.parseColor("#FF0000")); // unselected
}
tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab())
.setBackgroundColor(Color.parseColor("#0000FF")); // selected
}
});
Run Code Online (Sandbox Code Playgroud)
如何更改tabhost文本颜色?
我的应用程序需要动态更新选项卡指示器,我试图通过调用TabSpec.setIndicator()来执行此操作,但它不起作用.这是我的代码:
在tabActivity的onCreate方法中:
tabHost = getTabHost();
TabSpec tabSpec = tabHost.newTabSpec("abc");
tabSpec.setIndicator("helloabc");
tabSpec.setContent(new MyViewFactory());
tabHost.addTab(tabSpec);
Run Code Online (Sandbox Code Playgroud)
现在我需要将tab指示符更改为另一个字符串,例如"xyz"
TabSpec tabSpec = MyTabActivity.getTabSpec();
tabSpec.setIndicator("xyz");
Run Code Online (Sandbox Code Playgroud)
但它不起作用.所以我想知道在将tab指针添加到tabhost之后如何更改它?非常感谢.
解
感谢@CommonsWare,我使用TabWidget.getChildAt制作它,这是我方便的代码:
TextView title = (TextView) tabHost.getTabWidget().getChildAt(tabId).findViewById(android.R.id.title)
title.setText("xyz");
Run Code Online (Sandbox Code Playgroud) 我有一个EditText和TabHost包含2个选项卡的布局.Android 1.6.
我在下面的例子中使用硬件键盘.重现步骤:
显示活动时,EditText将获得焦点.
只要按任意键,EditText就会失去焦点,第一个标签会获得它.
我再次点击EditText并开始输入.
除非我按下任何数字按钮,否则它有效.第一个标签再次获得焦点.
我用轨迹球滚动回EditText.我现在可以打字了.
在步骤2,3中在焦点EditText上左/右使用跟踪球也会使EditText失去焦点.
这很奇怪.怎么处理这个?
main.xml布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical">
<EditText android:id="@+id/textfield" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:maxLines="1"
android:lines="1" android:hint="Search" />
<TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_weight="1">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_weight="1">
<LinearLayout android:id="@+id/tab1"
android:layout_width="fill_parent" android:layout_height="wrap_content" />
<LinearLayout android:id="@+id/tab2"
android:layout_width="fill_parent" android:layout_height="wrap_content" />
</FrameLayout>
<TabWidget android:id="@android:id/tabs"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:gravity="bottom" />
</LinearLayout>
</TabHost>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
活动类:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost tabs = (TabHost) this.findViewById(android.R.id.tabhost);
tabs.setup();
Button vBtn;
TabSpec …Run Code Online (Sandbox Code Playgroud) 视图层次结构如下TabActivity- > ActivityGroups- > Activities.
使用MAT我发现TabWidget被引用的TabHost引用InputMethodManager,因此TabWidget被泄露.在后续启动应用程序时抛出OutOfMemory错误.
同样,我的所有活动也被引用InputMethodManager.(关闭应用程序后,我的所有活动组,活动,tabactivity,tabhost和tabwidget都被泄露!!)
在正确完成应用程序(按回键)后,将在logcat中显示以下内容
WARN/InputManagerService(99):在非聚焦客户端上启动输入com.android.internal.view.IInputMethodClient$Stub$Proxy@44a87748(uid = 10052 pid = 1463)
如何从InputMethodManager...中删除引用?
我尝试过:
A.称onDestroy我的这种方法TabActivity
1. myTabWidget.removeAllViews()
2.myTabWidger.invalidate()
没运气!
我想在Android中制作垂直标签,如下图所示.

我从下面的链接看到了垂直标签的示例.
在这个链接中,答案有一些注释,在评论中他们有共享代码,但链接mega-upload已过期.
我尝试了很多方法但不能垂直显示标签.当我按照链接尝试时,无法显示标签.请帮我
我想实现与iPhone中相同的功能

我在底部栏中实现了与iPhone相同的自定义Tabhost.我可以为Normal/Selected状态设置两个Icons,但是我需要动态图标,其中包含Image中给出的通知数量.
谢谢
android android-custom-view android-tabhost android-tabactivity
我已经使用视图寻呼机实现了嵌套标签没有问题,但我的问题是在刷卡部分,
当我执行滑动操作时,主活动选项卡将被切换,但我希望片段可以滑动.我该怎么做到这一点?
tabs android android-tabhost android-fragments android-viewpager
这是我的代码:
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
TabHost tabHost = new TabHost(this);
TabHost.TabSpec tab = tabHost.newTabSpec("tab1");
tab.setIndicator("Tab 1");
tab.setContent(new TabHost.TabContentFactory() {
@Override
public View createTabContent(String tag) {
TextView tv = new TextView(Main.this);
tv.setText("tab 1 content");
return tv;
}
});
tabHost.addTab(tab);
setContentView(tabHost);
}
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
[...]
07-13 20:26:49.261: ERROR/AndroidRuntime(625): Caused by: java.lang.NullPointerException
07-13 20:26:49.261: ERROR/AndroidRuntime(625): at android.widget.TabHost.addTab(TabHost.java:206)
07-13 20:26:49.261: ERROR/AndroidRuntime(625): at test.test.Main.onCreate(Main.java:27)
[...]
Run Code Online (Sandbox Code Playgroud)
我需要通过代码执行此操作,我不能使用XML.任何人都可以帮我解决这个问题吗?