热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidTabSwitcher自定义控件

main.xml  Java代码                           TabSwitcher.java  Java代码   package com.iai


main.xml 
Java代码  
  
    android:orientation="vertical" android:layout_width="fill_parent"  
    android:layout_height="fill_parent" android:background="#ffffff">   
             android:id="@+id/tab" android:orientation="vertical"  
        android:layout_width="fill_parent" android:layout_height="wrap_content"  
        android:background="#ffffff">   
    
  
 



android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="#ffffff">
android:id="@+id/tab" android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:background="#ffffff">






TabSwitcher.java 
Java代码  
package com.iaiai.activity;   
  
import android.content.Context;   
import android.graphics.Color;   
import android.view.Gravity;   
import android.view.View;   
import android.widget.LinearLayout;   
import android.widget.TextView;   
  
/**  
 *   
 *

 
 * Title: TabSwitcher.java  
 *

 
 *

 
 * E-Mail: 176291935@qq.com  
 *

 
 *

 
 * QQ: 176291935  
 *

 
 *

 
 * Http: iaiai.iteye.com  
 *

 
 *

 
 * Create time: 2011-8-11  
 *

 
 *   
 * @author 丸子  
 * @version 0.0.1  
 */  
public class TabSwitcher extends LinearLayout {   
  
    private Context context;   
    private String[] texts;   
    private int selectedPosition = 0;   
    private int oldPosition = selectedPosition;   
    private int[] background = { R.drawable.tabswitcher_short,   
            Color.TRANSPARENT };   
    private TextView[] tvs;   
  
    public TabSwitcher(Context context, String[] texts) {   
        super(context);   
        this.texts = texts;   
        this.context = context;   
        setOrientation(HORIZONTAL);   
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(   
                LinearLayout.LayoutParams.FILL_PARENT,   
                LinearLayout.LayoutParams.WRAP_CONTENT);   
        setLayoutParams(params);   
        setBackgroundResource(R.drawable.tabswitcher_long);   
    }   
  
    @Override  
    protected void onFinishInflate() {   
        // TODO Auto-generated method stub   
        super.onFinishInflate();   
        tvs = new TextView[texts.length];   
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(   
                LinearLayout.LayoutParams.FILL_PARENT,   
                LinearLayout.LayoutParams.WRAP_CONTENT);   
        params.weight = 1;   
        params.gravity = Gravity.CENTER_VERTICAL;   
        for (int i = 0; i             TextView child = new TextView(context);   
            child.setTag(i);   
            child.setTextSize(16);   
            child.setTextColor(Color.BLACK);   
            child.setGravity(Gravity.CENTER);   
  
            tvs[i] = child;   
            child.setOnClickListener(listener);   
            this.addView(child, params);   
        }   
    }   
  
    OnClickListener listener = new OnClickListener() {   
  
        @Override  
        public void onClick(View v) {   
            selectedPosition = (Integer) v.getTag();   
            if (selectedPosition != oldPosition) {   
                tvs[oldPosition].setBackgroundColor(background[1]);   
                oldPosition = selectedPosition;   
                ((TextView) v).setBackgroundResource(background[0]);   
                if (onItemClickLisener != null) {   
                    onItemClickLisener.onItemClickLisener(v, selectedPosition);   
                }   
            }   
        }   
  
    };   
  
    @Override  
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {   
        super.onSizeChanged(w, h, oldw, oldh);   
        oldPosition = selectedPosition;   
        for (int i = 0; i             tvs[i].setText(texts[i]);   
            if (selectedPosition == i) {   
                tvs[i].setBackgroundResource(background[0]);   
            } else {   
                tvs[i].setBackgroundColor(background[1]);   
            }   
        }   
    }   
  
    private OnItemClickLisener onItemClickLisener;   
  
    public void setOnItemClickLisener(OnItemClickLisener onItemClickLisener) {   
        this.onItemClickLisener = onItemClickLisener;   
    }   
  
    public interface OnItemClickLisener {   
        void onItemClickLisener(View view, int position);   
    }   
  
    public void setTexts(String[] texts) {   
        this.texts = texts;   
    }   
  
    public void setSelectedPosition(int selectedPosition) {   
        this.selectedPosition = selectedPosition;   
    }   
  
}  


package com.iaiai.activity;


import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;


/**
 * 
 *


 * Title: TabSwitcher.java
 *


 *


 * E-Mail: 176291935@qq.com
 *


 *


 * QQ: 176291935
 *


 *


 * Http: iaiai.iteye.com
 *


 *


 * Create time: 2011-8-11
 *


 * 
 * @author 丸子
 * @version 0.0.1
 */
public class TabSwitcher extends LinearLayout {


private Context context;
private String[] texts;
private int selectedPosition = 0;
private int oldPosition = selectedPosition;
private int[] background = { R.drawable.tabswitcher_short,
Color.TRANSPARENT };
private TextView[] tvs;


public TabSwitcher(Context context, String[] texts) {
super(context);
this.texts = texts;
this.context = context;
setOrientation(HORIZONTAL);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
setLayoutParams(params);
setBackgroundResource(R.drawable.tabswitcher_long);
}


@Override
protected void onFinishInflate() {
// TODO Auto-generated method stub
super.onFinishInflate();
tvs = new TextView[texts.length];
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
params.weight = 1;
params.gravity = Gravity.CENTER_VERTICAL;
for (int i = 0; i TextView child = new TextView(context);
child.setTag(i);
child.setTextSize(16);
child.setTextColor(Color.BLACK);
child.setGravity(Gravity.CENTER);


tvs[i] = child;
child.setOnClickListener(listener);
this.addView(child, params);
}
}


OnClickListener listener = new OnClickListener() {


@Override
public void onClick(View v) {
selectedPosition = (Integer) v.getTag();
if (selectedPosition != oldPosition) {
tvs[oldPosition].setBackgroundColor(background[1]);
oldPosition = selectedPosition;
((TextView) v).setBackgroundResource(background[0]);
if (onItemClickLisener != null) {
onItemClickLisener.onItemClickLisener(v, selectedPosition);
}
}
}


};


@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
oldPosition = selectedPosition;
for (int i = 0; i tvs[i].setText(texts[i]);
if (selectedPosition == i) {
tvs[i].setBackgroundResource(background[0]);
} else {
tvs[i].setBackgroundColor(background[1]);
}
}
}


private OnItemClickLisener onItemClickLisener;


public void setOnItemClickLisener(OnItemClickLisener onItemClickLisener) {
this.onItemClickLisener = onItemClickLisener;
}


public interface OnItemClickLisener {
void onItemClickLisener(View view, int position);
}


public void setTexts(String[] texts) {
this.texts = texts;
}


public void setSelectedPosition(int selectedPosition) {
this.selectedPosition = selectedPosition;
}


}




IaiaiActivity.java 
Java代码  
package com.iaiai.activity;   
  
import android.app.Activity;   
import android.os.Bundle;   
import android.view.View;   
import android.widget.LinearLayout;   
import android.widget.Toast;   
  
import com.iaiai.activity.TabSwitcher.OnItemClickLisener;   
  
/**  
 *   
 *

 
 * Title: IaiaiActivity.java  
 *

 
 *

 
 * E-Mail: 176291935@qq.com  
 *

 
 *

 
 * QQ: 176291935  
 *

 
 *

 
 * Http: iaiai.iteye.com  
 *

 
 *

 
 * Create time: 2011-8-11  
 *

 
 *   
 * @author 丸子  
 * @version 0.0.1  
 */  
public class IaiaiActivity extends Activity {   
  
    @Override  
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.main);   
        TabSwitcher tabSwitcher = new TabSwitcher(this, new String[] { "1",   
                "2", "3", "4" });   
        tabSwitcher.setSelectedPosition(1);   
        tabSwitcher.setOnItemClickLisener(onItemClickLisener);   
        tabSwitcher.onFinishInflate();   
           
        LinearLayout linearLayout = (LinearLayout) findViewById(R.id.tab);   
        linearLayout.addView(tabSwitcher, new LinearLayout.LayoutParams(   
                LinearLayout.LayoutParams.FILL_PARENT,   
                LinearLayout.LayoutParams.WRAP_CONTENT));   
    }   
  
    OnItemClickLisener onItemClickLisener = new OnItemClickLisener() {   
        @Override  
        public void onItemClickLisener(View view, int position) {   
            // TODO Auto-generated method stub   
            //   
            switch (position) {   
            case 0:   
            case 1:   
            case 2:   
                Toast.makeText(IaiaiActivity.this,   
                        "position clicked:" + position, Toast.LENGTH_SHORT)   
                        .show();   
                break;   
            default:   
                break;   
            }   
        }   
  
    };   
}  




推荐阅读
  • 本文探讨了在Android应用中实现动态滚动文本显示控件的优化方法。通过详细分析焦点管理机制,特别是通过设置返回值为`true`来确保焦点不会被其他控件抢占,从而提升滚动文本的流畅性和用户体验。具体实现中,对`MarqueeText.java`进行了代码层面的优化,增强了控件的稳定性和兼容性。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • 掌握Android UI设计:利用ZoomControls实现图片缩放功能
    本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • JComponentJLabel的setBorder前言用例2205262241前言setBorder(Border边框)实现自JComponentjava.awt.Insets ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 在Java项目中,当两个文件进行互相调用时出现了函数错误。具体问题出现在 `MainFrame.java` 文件中,该文件位于 `cn.javass.bookmgr` 包下,并且导入了 `java.awt.BorderLayout` 和 `java.awt.Event` 等相关类。为了确保项目的正常运行,请求提供专业的解决方案,以解决函数调用中的错误。建议从类路径、依赖关系和方法签名等方面入手,进行全面排查和调试。 ... [详细]
  • Android 图像色彩处理技术详解
    本文详细探讨了 Android 平台上的图像色彩处理技术,重点介绍了如何通过模仿美图秀秀的交互方式,利用 SeekBar 实现对图片颜色的精细调整。文章展示了具体的布局设计和代码实现,帮助开发者更好地理解和应用图像处理技术。 ... [详细]
  • 本题探讨如何编写程序来计算一个数值的整数次方,涉及多种情况的处理。 ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • 开发笔记:深入解析Android自定义控件——Button的72种变形技巧
    开发笔记:深入解析Android自定义控件——Button的72种变形技巧 ... [详细]
author-avatar
神的禁卫军
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有