android 4.4 自己加上的
android-support-v4.jar 使用以下布局会报
No tab content FrameLayout found for id xxxxxxx
我老版本的 android-support-v4.jar 差距很大
用FragmentTabHost + FragmentActivity 实现了微博的底部Tab,layout布局如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <FrameLayout
- android:id="@+id/realtabcontent"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1" />
- <android.support.v4.app.FragmentTabHost
- android:id="@android:id/tabhost"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" >
- <TabWidget
- android:id="@android:id/tabs"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true" />
- <FrameLayout
- android:id="@android:id/tabcontent"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
- </android.support.v4.app.FragmentTabHost>
- </LinearLayout>
Activity如下:
- package com.yuzile.yuzile;
- import java.util.Map;
- import com.yuzile.yuzile.util.YuziLog;
- import android.graphics.drawable.Drawable;
- import android.os.Bundle;
- import android.support.v4.app.FragmentActivity;
- import android.support.v4.app.FragmentTabHost;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.ImageView;
- import android.widget.TextView;
- import android.widget.TabHost.TabSpec;
- public class MainActivity extends FragmentActivity {
- private FragmentTabHost mTabHost;
- private final static String[] tags = { "intro", "guide", "artworks",
- "discovery" };
- private final static Class[] tagClasses = { IntroFragment.class,
- GuideFragment.class, ArtworksFragment.class,
- DiscoveryFragment.class };
- private final static String[] tagIndicators = { "简介", "导览", "作品", "发现" };
- private final static int[] tagImages = {
- R.drawable.tab_bar_intro_bg_selector,
- R.drawable.tab_bar_guide_bg_selector,
- R.drawable.tab_bar_artworks_bg_selector,
- R.drawable.tab_bar_discovery_bg_selector };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main_activity);
- mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
- initTabHost();
- }
- private void initTabHost() {
- mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
- findViewById(android.R.id.tabs).setBackgroundResource(
- R.drawable.bottombarbg);
- for (int i = 0; i < tags.length; i++) {
- TabSpec tabSpec = mTabHost.newTabSpec(tags[i]);
- Drawable drawable = getResources().getDrawable(
- R.drawable.tab_bar_intro_bg_selector);
- tabSpec.setIndicator(getIndicatorView(i));
- mTabHost.addTab(tabSpec, tagClasses[i], null);
- }
- }
- private View getIndicatorView(int i) {
- LayoutInflater inflater = getLayoutInflater();
- ViewGroup views = (ViewGroup) inflater.inflate(
- R.layout.tab_widget_item, null);
- ImageView imageView = (ImageView) views
- .findViewById(R.id.tab_widget_item_image);
- TextView textView = (TextView) views
- .findViewById(R.id.tab_widget_item_text);
- imageView.setBackgroundResource(tagImages[i]);
- textView.setText(tagIndicators[i]);
- return views;
- }
- }
刚开始一直进行得非常顺利,但是就在今天,我导入了一个Google Map的Library,地图都进行的很顺利,但是在编译的时候提示
Found2 versions of android-support-v4.jar in the dependency list,
就是有两个版本的android-support-v4.jar , 我一看是因为Google Map的Library也有一个,两个估计是不一样引起提示,强迫症患者就讨厌就是看到提示了,所以我想用其中一个替换另一个,但是以哪个为准呢?既然Google Map是官方的库,肯定没问题,所以用Google Map Library的android-support-v4.jar替换了我当前的项目的了.好了,麻烦就来了:启动App就会崩掉,并且报错:No tab content FrameLayout found for id xxxxxxx . 原来工作得挺好的,后来就崩了,所以我肯定代码是没问题的.
网上有答案说要自定义FragmentTabHost http://stackoverflow.com/questions/13408709/android-tabs-at-the-bottom-with-fragmenttabhost , 但是我并不像这么做,也没尝试,纠结很久之后,知道是android-support-v4.jar某些版本的Bug引起的,但是我不知道是什么版本,什么版本修好了,官方也没有说明,所以一个思路是找到正确的那个版本,在自己的开发环境新建了一个工程,按照原来的工程配置,但还是一样的错误,我也不知道为什么,也许来大姨妈了. 最后在网上找了一些实例代码下载,先正确运行了,然后偷里面的android-support-v4.jar 替换到项目中,果然可以了,罪魁祸首就是Google Map的android-support-v4.jar ,害得我浪费了一天啊.
后来又崩了,不断提示:
Found 2 versions of android-support-v4.jar in the dependency list,
but not all the versions are identical (check is based on SHA-1 only at this time).
All versions of the libraries must be the same at this time.
就是这个错误导致了启动的时候找不到Activity,所以必须解决两个不同版本的android-support-v4.jar冲突的问题,解决方法当然是覆盖了...
参考网址:http://code.google.com/p/android/issues/detail?id=53230
相关推荐
1. 创建TabHost实例并设置其ID为android.R.id.tabhost,这通常在XML布局文件中完成。 2. 初始化TabHost并设置它的内容视图为包含FrameLayout的布局。 3. 使用TabHost的`newTabSpec()`方法创建标签规格,指定标签的...
android:id="@android:id/tabcontent" android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="0" /> ``` 在上面的布局文件中, FragmentTabHost 和 FrameLayout 是两个主要的...
FrameLayout contentContainer = findViewById(R.id.content_container); contentContainer.removeAllViews(); contentContainer.addView(tab1Content); // 在onCheckedChanged中切换内容 public void ...
android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 步骤二:在Activity中初始化TabHost 在对应的Activity中,我们需要初始化TabHost并...
ft1.add(R.id.tabcontent, new Tab1Fragment(), "tab1"); tab1.setContent(ft1.commit()); TabSpec tab2 = tabHost.newTabSpec("tab2"); tab2.setIndicator("Tab 2", getResources().getDrawable(R.drawable.tab_...
android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="5dp" /> ``` 然后,在对应的Activity中初始化TabHost并添加Tab: ```...
- `FrameLayout`用于显示每个Tab的内容,它的ID通常是`android:id/tabcontent`。将其添加到`TabHost`内,`TabHost`会自动处理内容的切换。 4. **Tab的事件监听** - 可以通过`TabHost.setOnTabChangedListener()`...
请注意,`R.id.tab1_content` 和 `R.id.tab2_content` 需要在XML布局文件中定义为两个独立的 FrameLayout 或其他视图,用于展示每个Tab的内容。 4. **自定义Tab样式**: 默认情况下,Tab的样式可能不符合设计要求...
在这个例子中,`R.id.tab1_content`和`R.id.tab2_content`是分别在两个不同的布局文件中定义的内容区域。 4. **处理Tab切换事件**:如果需要在Tab切换时执行特定操作,可以重写`onTabChanged()`方法。当用户切换Tab...
FrameLayout在Android开发中是一种基础且重要的布局管理器,它为开发者提供了在屏幕上精确控制视图(Views)位置的能力。本练习旨在帮助新手理解和熟练掌握FrameLayout的使用,从而为后续更复杂的布局设计打下坚实的...
android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 2. **设置Tab内容** 在`Activity`的`onCreate`方法中,我们需要初始化`TabHost...
android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="5dp" /> ``` 接下来,我们关注动态改变tab背景图片的部分。在Android中...
这里的`R.id.tab1_content`和`R.id.tab2_content`是FrameLayout的id,它们分别对应每个Tab的内容。 4. **样式调整** 为了让Tab更符合底部导航栏的风格,我们可能需要自定义Tab的样式,包括字体、颜色、背景等。这...
在Android应用开发中,"FrameLayout+底部栏切换"是一个常见的设计模式,它用于构建具有多个主内容区域并可以通过底部导航栏在这些区域之间切换的应用界面。这种布局方式提供了直观的用户交互,使得用户能够轻松地在...
19Android-04-frameLayout.mp4
android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 接下来,在Java代码中初始化`TabHost`,并添加对应的标签页。每个标签页通常关联一...
FrameLayout是Android SDK中的一个布局容器,主要用于展示一个或多个视图(Views)在一个特定的框架内,通常这些视图会重叠放置。这个布局在许多简单场景中非常有用,例如,当您需要一个背景视图和一个浮于其上的...
TabHost可以看作是一个容器,它管理多个小窗口(FrameLayout),每个窗口对应一个Tab,而TabWidget则负责显示这些Tab。在"Tab-TabHost.zip_Tabú_tabhost"这个资源中,包含了一个关于如何使用TabHost和TabWidget的...
`FragmentTabHost`需要设置`android:id="@android:id/tabhost"`,并且通常有一个`FrameLayout`子元素,用于`TabHost`的内容显示,其`android:id="@android:id/tabcontent"`。 **二、代码实现** 2. `MainActivity`...