zoukankan      html  css  js  c++  java
  • Android TabHost的标签放在底部,已写成框架,继承即可

    感受一下不错的述说:

    【每日话题】Android是自学好还是培训好,你有啥高招?
    http://www.eoeandroid.com/thread-193467-1-1.html

    【每日话题】留在这城市的理由
    http://www.eoeandroid.com/thread-191466-1-1.html

    【每日话题】面试那些事儿—面霸是怎样炼成的
    http://www.eoeandroid.com/thread-193078-1-1.html

     

    网上已经有很多关于如何将TabHost的标签放在底部,这里就不说了

    主要是把这些都做成框架,只需要提供图片和文字就可以实现这样的效果。

    直接上图,代码解释的很清楚

    程序的图片借用新浪微博.

     

    使用代码:

    package com.api.example.app;
     
    import java.util.ArrayList;
    import java.util.List;
     
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.TabWidget;
    import android.widget.TextView;
     
    import com.api.R;
    import com.api.TabHostActivity;
     
    /**
    * 整个流程就像使用ListView自定BaseAdapter一样
     
    * 
    * 如果要自定义TabHostActivity的Theme,并且不想要头部阴影
    * 一定要添加这个android:windowContentOverlay = null
     
    * 
    * 如果想在别的项目里面使用TabHostActivity
    * 可以项目的属性里面找到Android,然后在Library部分添加这个项目(Api)
    * <a href='\"http://www.cnblogs.com/qianxudetianxia/archive/2011/05/01/2030232.html\"' target='\"_blank\"'>如何添加</a>
     
    * */
    public class ExampleActivity extends TabHostActivity {
     
    List mItems;
    private LayoutInflater mLayoutInflater;
     
    /**在初始化TabWidget前调用
    * 和TabWidget有关的必须在这里初始化*/
    @Override
    protected void prepare() {
    TabItem home = new TabItem(
    "首页", // title
    R.drawable.icon_home, // icon
    R.drawable.example_tab_item_bg, // background
    new Intent(this, Tab1Activity.class)); // intent
     
    TabItem info = new TabItem(
    "资料",
    R.drawable.icon_selfinfo,
    R.drawable.example_tab_item_bg,
    new Intent(this, Tab2Activity.class));
     
    TabItem msg = new TabItem(
    "信息",
    R.drawable.icon_meassage,
    R.drawable.example_tab_item_bg,
    new Intent(this, Tab3Activity.class));
     
    TabItem square = new TabItem(
    "广场",
    R.drawable.icon_square,
    R.drawable.example_tab_item_bg,
    new Intent(this, Tab4Activity.class));
     
    TabItem more = new TabItem(
    "更多",
    R.drawable.icon_more,
    R.drawable.example_tab_item_bg,
    new Intent(this, Tab5Activity.class));
     
    mItems = new ArrayList();
    mItems.add(home);
    mItems.add(info);
    mItems.add(msg);
    mItems.add(square);
    mItems.add(more);
     
    // 设置分割线
    TabWidget tabWidget = getTabWidget();
    tabWidget.setDividerDrawable(R.drawable.tab_divider);
     
    mLayoutInflater = getLayoutInflater();
    }
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setCurrentTab(0);
    }
     
    /**tab的title,icon,边距设定等等*/
    @Override
    protected void setTabItemTextView(TextView textView, int position) {
    textView.setPadding(3, 3, 3, 3);
    textView.setText(mItems.get(position).getTitle());
    textView.setBackgroundResource(mItems.get(position).getBg());
    textView.setCompoundDrawablesWithIntrinsicBounds(0, mItems.get(position).getIcon(), 0, 0);
     
    }
     
    /**tab唯一的id*/
    @Override
    protected String getTabItemId(int position) {
    return mItems.get(position).getTitle(); // 我们使用title来作为id,你也可以自定
    }
     
    /**点击tab时触发的事件*/
    @Override
    protected Intent getTabItemIntent(int position) {
    return mItems.get(position).getIntent();
    }
     
    @Override
    protected int getTabItemCount() {
    return mItems.size();
    }
     
    /**自定义头部文件*/
    @Override
    protected View getTop() {
    return mLayoutInflater.inflate(R.layout.example_top, null);
    }
     
    }

    框架代码:

    package com.api;
     
    import android.app.TabActivity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.LinearLayout;
    import android.widget.TabHost;
    import android.widget.TabHost.TabSpec;
    import android.widget.TabWidget;
    import android.widget.TextView;
     
    public abstract class TabHostActivity extends TabActivity {
     
    private TabHost mTabHost;
    private TabWidget mTabWidget;
    private LayoutInflater mLayoutflater;
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // set theme because we do not want the shadow
    setTheme(R.style.Theme_Tabhost);
    setContentView(R.layout.api_tab_host);
     
    mLayoutflater = getLayoutInflater();
     
    mTabHost = getTabHost();
    mTabWidget = getTabWidget();
    //mTabWidget.setStripEnabled(false); // need android2.2
     
    prepare();
     
    initTop();
    initTabSpec();
    }
     
    private void initTop() {
    View child = getTop();
    LinearLayout layout = (LinearLayout) findViewById(R.id.tab_top);
    layout.addView(child);
    }
     
    private void initTabSpec() {
     
    int count = getTabItemCount();
     
    for (int i = 0; i < count; i++) {
    // set text view
    View tabItem = mLayoutflater.inflate(R.layout.api_tab_item, null);
     
    TextView tvTabItem = (TextView) tabItem.findViewById(R.id.tab_item_tv);
    setTabItemTextView(tvTabItem, i);
    // set id
    String tabItemId = getTabItemId(i);
    // set tab spec
    TabSpec tabSpec = mTabHost.newTabSpec(tabItemId);
    tabSpec.setIndicator(tabItem);
    tabSpec.setContent(getTabItemIntent(i));
     
    mTabHost.addTab(tabSpec);
    }
     
    }
     
    /** 在初始化界面之前调用 */
    protected void prepare() {
    // do nothing or you override it
    }
     
    /** 自定义头部布局 */
    protected View getTop() {
    // do nothing or you override it
    return null;
    }
     
    protected int getTabCount() {
    return mTabHost.getTabWidget().getTabCount();
    }
     
    /** 设置TabItem的图标和标题等*/
    abstract protected void setTabItemTextView(TextView textView, int position);
     
    abstract protected String getTabItemId(int position);
     
    abstract protected Intent getTabItemIntent(int position);
     
    abstract protected int getTabItemCount();
     
    protected void setCurrentTab(int index) {
    mTabHost.setCurrentTab(index);
    }
     
    protected void focusCurrentTab(int index) {
    mTabWidget.focusCurrentTab(index);
    }
     
    }


     源码下载

     

  • 相关阅读:
    Python写出LSTM-RNN的代码
    TensorFlow 实现 RNN 入门教程
    RNN与应用案例:注意力模型与机器翻译
    RNN入门
    内积(又名点积)
    词袋模型(BOW, bag of words)
    softmax
    Dropout
    随机梯度下降法
    L1范式和L2范式
  • 原文地址:https://www.cnblogs.com/vus520/p/2648994.html
Copyright © 2011-2022 走看看