代码已经整理好,这里要说一下,因为手动和Json获取写法不一样。
手动直接xml设置:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#E1E6F6" android:orientation="vertical" > <com.zhy.zhy_flowlayout02.FlowLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView style="@style/text_flag_01" android:text="Welcome" /> <TextView style="@style/text_flag_01" android:text="IT工程师" /> <TextView style="@style/text_flag_01" android:text="学习ing" /> <TextView style="@style/text_flag_01" android:text="恋爱ing" /> <TextView style="@style/text_flag_01" android:text="挣钱ing" /> <TextView style="@style/text_flag_01" android:text="努力ing" /> <TextView style="@style/text_flag_01" android:text="I thick i can" /> </com.zhy.zhy_flowlayout02.FlowLayout> <com.zhy.zhy_flowlayout02.FlowLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" > <TextView style="@style/text_flag_01" android:background="@drawable/flag_02" android:text="Welcome" android:textColor="#888888" /> <TextView style="@style/text_flag_01" android:background="@drawable/flag_02" android:text="IT工程师" android:textColor="#888888" /> <TextView style="@style/text_flag_01" android:background="@drawable/flag_02" android:text="学习ing" android:textColor="#888888" /> <TextView style="@style/text_flag_01" android:background="@drawable/flag_02" android:text="恋爱ing" android:textColor="#888888" /> <TextView style="@style/text_flag_01" android:background="@drawable/flag_02" android:text="挣钱ing" android:textColor="#888888" /> <TextView style="@style/text_flag_01" android:background="@drawable/flag_02" android:text="努力ing" android:textColor="#888888" /> <TextView style="@style/text_flag_01" android:background="@drawable/flag_02" android:text="I thick i can" android:textColor="#888888" /> </com.zhy.zhy_flowlayout02.FlowLayout> <com.zhy.zhy_flowlayout02.FlowLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" > <TextView style="@style/text_flag_01" android:background="@drawable/flag_03" android:text="Welcome" android:textColor="#43BBE7" /> <TextView style="@style/text_flag_01" android:background="@drawable/flag_03" android:text="IT工程师" android:textColor="#43BBE7" /> <TextView style="@style/text_flag_01" android:background="@drawable/flag_03" android:text="学习ing" android:textColor="#43BBE7" /> <TextView style="@style/text_flag_01" android:background="@drawable/flag_03" android:text="恋爱ing" android:textColor="#43BBE7" /> <TextView style="@style/text_flag_01" android:background="@drawable/flag_03" android:text="挣钱ing" android:textColor="#43BBE7" /> <TextView style="@style/text_flag_01" android:background="@drawable/flag_03" android:text="努力ing" android:textColor="#43BBE7" /> <TextView style="@style/text_flag_01" android:background="@drawable/flag_03" android:text="I thick i can" android:textColor="#43BBE7" /> </com.zhy.zhy_flowlayout02.FlowLayout> </LinearLayout>
效果如下:
Json获取:
if(message.what == 1) { // 处理操作 pingjia = newArrayList<Pingjia>(); pingjia.addAll(JsonUtils.getBeanList(message.result,"Items", Pingjia.class)); FlowLayout layout = (FlowLayout)findViewById(R.id.layou23); LinearLayout.LayoutParams params = newLinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); params.gravity =Gravity.CENTER_VERTICAL; // 加载TextView for (int i = 0; i < pingjia.size();i++) { Pingjia ping = pingjia.get(i); tvNav = new TextView(this); tvNav.setTextSize(13.f); // tvNav.setWidth((int)Math.floor(Double.valueOf(a))); // tvNav.setHeight((int)Math.floor(Double.valueOf(b))); tvNav.setText(ping.getContent()); tvNav.setId(ping.getId()); tvNav.setBackgroundResource(R.anim.flag_022); tvNav.setTag(false); tvNav.setTextColor(getResources().getColor(R.color.gray)); // tvNav.setPadding(30, 10, 30, 10); // tvNav.setGravity(Gravity.CENTER_HORIZONTAL); tvNav.setOnClickListener(newTvClickListener(tvNav)); layout.addView(tvNav, params); } private TextView tvNav; private String str = ""; private String strId = ""; /** * 标题栏textview 点击事件 * * @author fei * */ private final class TvClickListener implements View.OnClickListener { // private int index; private TextView tvNav; public TvClickListener(TextView tvNav) { super(); // this.index = index; this.tvNav = tvNav; } @Override public void onClick(View v) { Boolean isclick = (Boolean) tvNav.getTag(); if (!isclick) { tvNav.setBackgroundResource(R.anim.flag_0444); tvNav.setTextColor(getResources().getColor(R.color.red)); tvNav.setTag(true); // 显示到上面 str = str + tvNav.getText().toString() + ","; ed_en.setText(str); // 记录Id strId = strId + tvNav.getId() + ","; // strId = strId.substring(0, strId.length() - 1); // MyLogUtil.v("传->strId", strId); } else { tvNav.setBackgroundResource(R.anim.flag_022); tvNav.setTextColor(getResources().getColor(R.color.gray)); tvNav.setTag(false); // 显示到上面 str = str.replace(tvNav.getText().toString() + ",", ""); ed_en.setText(str); // 记录Id strId = strId.replace(tvNav.getId() + ",", ""); // strId = strId.substring(0, strId.length() - 1); // MyLogUtil.v("Delete->strId", strId); } // ToastUtil.showToastLong(tvNav.getId() + "," // + tvNav.getText().toString()); } }
xml设置:
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/dimens_10" android:layout_marginLeft="@dimen/x10" android:layout_marginRight="@dimen/x10" android:layout_marginTop="@dimen/y20" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableLeft="@drawable/biaoqian1" android:drawablePadding="@dimen/dimens_10" android:text="@string/bq3" android:textColor="@color/black" android:textSize="15sp" /> <com.kangxin.patient.utils.FlowLayout android:id="@+id/layou23" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/y10"思科加强生成树性能的属性(Portfast /Uplinkfast/BackboneFast)与RSTP的关系 阅读原文»思科加强生成树性能的属性(Portfast /Uplinkfast/BackboneFast)与RSTP的关系思科加强生成树性能的属性(Portfast/Uplinkfast/BackboneFast)与RSTP的关系
本文截自于博主CCNP交换技术稿件内容
4.2.6思科加强生成树性能的属性(Portfast/Uplinkfast/BackboneFast)与RSTP的关系
首先说明一下,为什么笔者专门将(Portfast/Uplinkfast/BackboneFast)与RSTP的关系来独立成一个小节进行描述,那是因为,笔者不知被现实工程中的技术实施人员问了同一个问题N次,关于这个问题如下:"为什么在很多资料上,描述RSTP特性时都会提到Portfast /Uplinkfast/BackboneFast这三个特性,甚至说RSTP是具备这三个特性的,然而通过实践工程环境大家不难发现,在很多设备上支持Uplinkfast/BackboneFast这两个特性的交换机一般都不支持RSTP,相反支持RSTP的交换机上一般都不会存在Uplinkfast/BackboneFast这两个特性(至少没有配置它们的命令),而Portfast是乎是所有设备都支持的,这是为什么呢?"
因原是Portfast/Uplinkfast/BackboneFast这三个思科的属性被完整的移植并集成到了RSTP生成树中,也就是因为这个原因,所以很多关于生成树的资料典籍中,在描述RSTP时会同时讨论Portfast/Uplinkfast/BackboneFast三个属性。所以读者在查看别的资料时别被这个给弄混淆了,它们的关键区别如下:
一、Portfast/Uplinkfast/BackboneFast本是思科在RSTP提出之前就具备的三个厂商特性,后来当RSTP集成了Portfast/Uplinkfast/BackboneFast的功能后,通常在支持RSTP生成树的交换机中,IOS就不再提供Uplinkfast/BackboneFast这两个特性的独立配置指令了,因为RSTP会自动完成这两个功能的配置。所以支持RSTP的生成树,就不会存在Uplinkfast/BackboneFast功能的配置指令。下一小节取证将给大家更详细证明这一现象。
二、但是传统的独立支持Portfast/Uplinkfast/BackboneFast三个属性指令的交换机和支持RSTP生成树的交换机都保留了Portfast功能配置的指令,在RSTP中这里的portfast被另一个名词所替代,那就是RSTP中的"边缘端口",事实上RSTP中的"边缘接口"和传统交换机上的portfast是一回事儿,只是说RSTP不会自动启用它,因为这样太危险,需要管理员手工启动,所以用户才会在传统的独立支持Portfast/Uplinkfast/BackboneFast三个属性指令的交换机和支持RSTP生成树的交换机上都能看到portfast的配置指令。
关于RSTP的特性和基本理论,笔者将在4.3小节部分做更多的描述。
4.2.7取证: Portfast/Uplinkfast/BackboneFast与RSTP的关系
为了更充分的证实4.2.6小节所描述的内容,现在可以通过对两台不同年代设备的生成树功能进行取证,来彻底的理解Portfast/Uplinkfast/BackboneFast与RSTP的关系。因为多数人习惯了在仿真平台上进行学习,那么也可以使用个不同的仿真平台来进行该小节的取证,比如:使用仿真平台GNS3中的3640交换机模块和思科官方的仿真平台Cisco Packet Tracer中的3560交换机。注意这两个设备在生成树功能上的区别在于,GNS3中的3640的交换模块相对于Cisco Packet Tracer中的3560交换机更传统,年代更久远。
首先在传统设备3640上在spanning-tree后面打问号,如图1所示,可以看到在所列出的可用参数中,用户是不能执行spanning-tree mode 来选择RSTP的生成树模式,因为它不支持RSTP模式,所以它提供了Portfast/Uplinkfast/BackboneFast三个思科私有属性来加速传统生成树;所以拥有独立执行三个思科私有属性的指令;相反在Cisco Packet Tracer中相对较新的交换机3560上在spanning-tree后面打问号,如图2所示,可以看到在所列出的可用参数中,用户是可以执行spanning-tree mode 来选择RSTP的生成树模式,由于RSTP是自动集成了Uplinkfast/BackboneFast,简单的讲就是RSTP生成树启动时,Uplinkfast/BackboneFast机制就被开启了,所以在3560上spanning-tree后面打问号就再也看不到启动Uplinkfast/BackboneFast的独立指令了。但是不难发现,无论是传统的3640还是相对较新的3560都能支持portfast指令,请注意对比图1和图3就很清晰,它们都支持portfast,是因为在RSTP生成树中,为了防止潜在的成环风险,边缘端口不会自动启用,需要管理员手工配置。
注意:通过上面的取证过程,说明了一个问题,如果交换机已经具备RSTP功能模式,还去独立搞个启动Uplinkfast/BackboneFast功能的指令作甚?这不画蛇添足吗?这并不是IOS镜像有问题,而是进一步体现了思科IOS镜像功能设计的精简性和科学性,如果用户有更好的网络技术基础,并知道一项技术的发展历程、以及移植集成性,还会在更多的功能上发现诸如此种特性。
本文出自 "无名的基督" 博客,谢绝转载!
每日博报 精彩不止一点
没有评论:
发表评论