日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 自动换行添加控件

發(fā)布時間:2024/1/8 Android 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 自动换行添加控件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

PS:轉(zhuǎn)載請注明出處,謝謝

最近在項目里面有幾個需要根據(jù)返回的數(shù)據(jù)來自動添加控件的地方,在網(wǎng)上找了一些,然后加上自己寫的一些,都一起整理完,然后給自己做個備注,啦啦啦啦啦啦~~~~

先貼一張鎮(zhèn)樓效果圖(效果圖不是很清晰,將就看了)

靜態(tài)的也來一張

PS:里面主要寫了三種樣式(不夠的話可以自己寫View替換),這里代碼就只展示第一種類型(太多了也展示不了,嘿嘿(關鍵是我想要分)),貼的代碼里面都有注解的,我就不寫了~~~~懶。

  • HorizontalScollTabHost.java自定義功能
  • /*** Created by $USER_NAME on 2018/8/9 0009.* author : tomz email:ibepend@126.com* 滑動添加的控件*/ public class HorizontalScollTabHost extends LinearLayout implements ViewPager.OnPageChangeListener {private final static String TAG = "HorizontalScollTabHost";private Context mContext;private int mBgColor;private int mTextSize;private List<String> list;private List<Fragment> fragmentList;private List<TextView> topViews;private int count;private LinearLayout mMenuLayout;private HorizontalScrollView hscrollview;private ViewPager viewpager;public HorizontalScollTabHost(Context context) {this(context, null);}public HorizontalScollTabHost(Context context, @Nullable AttributeSet attrs) {this(context, attrs, 0);}public HorizontalScollTabHost(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);this.mContext = context;init(context, attrs);}/*** 初始化自定義屬性和view** @param context* @param attrs*/private void init(Context context, AttributeSet attrs) {TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.HorizontalScollTabhost);mBgColor = typedArray.getColor(R.styleable.HorizontalScollTabhost_top_background, 0x20999999);mTextSize = (int) typedArray.getDimension(R.styleable.HorizontalScollTabhost_textSize, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12, getResources().getDisplayMetrics()));typedArray.recycle();initView();}/*** 初始化view*/private void initView() {View view = LayoutInflater.from(mContext).inflate(R.layout.horizontal_scroll_tabhost, this, true);hscrollview = (HorizontalScrollView) view.findViewById(R.id.horizontalScrollView);viewpager = (ViewPager) view.findViewById(R.id.viewpager_fragment);viewpager.addOnPageChangeListener(this);mMenuLayout = (LinearLayout) view.findViewById(R.id.layout_menu);}/*** 供調(diào)用者調(diào)用,保證數(shù)據(jù)獨立** @param list* @param fragments*/public void diaplay(List<String> list, List<Fragment> fragments, Handler handler) {this.list = list;this.count = list.size();this.fragmentList = fragments;this.mHandler = handler;topViews = new ArrayList<>(count);drawUi();}public void diaplay(List<String> list, Handler handler) {this.list = list;this.count = list.size();this.mHandler = handler;topViews = new ArrayList<>(count);drawUi();}public void diaplay(List<String> list) {this.list = list;this.count = list.size();topViews = new ArrayList<>(count);drawUi();}/*** 繪制頁面所有元素*/private void drawUi() {drawHorizontal();}boolean isFalst = false;TextView[] textViews;int finalI;private Bundle bundle;private final int SELCT_SUCCESS = 0x00123;private Handler mHandler;private int typeId = 0;private List<Integer> listNum = new ArrayList<Integer>();/*** 繪制橫向滑動菜單*/private void drawHorizontal() { // mMenuLayout.setBackgroundColor(mBgColor);textViews = new TextView[count];for (int i = 0; i < count; i++) {final String menu = list.get(i);final TextView tv = (TextView) View.inflate(mContext, R.layout.news_top_tv_item, null);textViews[i] = tv;//這行代碼很重要,textViews[i].setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize); // textViews[i].setTextSize(15);textViews[i].setText(menu + " ");textViews[i].setTag(i);finalI = i;LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);lp.setMargins(15, 10, 0, 10);tv.setLayoutParams(lp);mMenuLayout.addView(tv);topViews.add(tv);}for (int j = 0; j < textViews.length; j++) {textViews[j].setTag(textViews);textViews[j].setOnClickListener(new LableClickListener());}//默認設置第一項為選中(news_top_tv_item.xml里面, android:textColor引用 drawable的selector)topViews.get(0).setSelected(true);textViews[0].setBackgroundResource(R.drawable.shape_border_nor);textViews[0].setTextColor(Color.parseColor("#E95D5C"));}/*** 這個是點擊返回當前信息*/class LableClickListener implements View.OnClickListener {public LableClickListener() {}@Overridepublic void onClick(View v) {TextView[] textViews = (TextView[]) v.getTag();TextView tv = (TextView) v;for (int i = 0; i < textViews.length; i++) {//讓點擊的標簽背景變成橙色,字體顏色變?yōu)榘咨玦f (tv.equals(textViews[i])) {textViews[i].setBackgroundResource(R.drawable.shape_border_nor);textViews[i].setTextColor(Color.parseColor("#E95D5C"));Toast.makeText(mContext, tv.getText().toString() + "", Toast.LENGTH_SHORT).show();//傳遞屬性選擇后的商品數(shù)據(jù) // Message message = new Message(); // bundle = new Bundle(); // bundle.putString("type_name", tv.getText().toString()); // message.setData(bundle); // message.what = SELCT_SUCCESS; // mHandler.sendMessage(message);} else {//其他標簽背景變成白色,字體顏色為黑色textViews[i].setBackgroundResource(R.drawable.shape_border_select);textViews[i].setTextColor(Color.parseColor("#666666"));}}//點擊移動到當前fragmentviewpager.setCurrentItem(finalI);//點擊讓文字居中moveItemToCenter(tv);}}/*** 移動view對象到中間** @param tv*/private void moveItemToCenter(TextView tv) {DisplayMetrics dm = getResources().getDisplayMetrics();int screenWidth = dm.widthPixels;int[] locations = new int[2];tv.getLocationInWindow(locations);int rbWidth = tv.getWidth();hscrollview.smoothScrollBy((locations[0] + rbWidth / 2 - screenWidth / 2),0);}@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {if (mMenuLayout != null && mMenuLayout.getChildCount() > 0) {for (int i = 0; i < mMenuLayout.getChildCount(); i++) {if (i == position) {mMenuLayout.getChildAt(i).setSelected(true);} else {mMenuLayout.getChildAt(i).setSelected(false);}}}//移動view,水平居中moveItemToCenter(topViews.get(position));}@Overridepublic void onPageScrollStateChanged(int state) {}}

    主要的控件生成代碼和滑動居中就已經(jīng)完成了,剩下的就是用法了

    ? 2. MainActivity.java實現(xiàn)功能效果

    public class MainActivity extends AppCompatActivity {private final static String TAG = "MainActivity";private HorizontalScollTabHost tabHost;private List<String> mList;private String strTiele[] = new String[]{"頭條", "推薦", "關注", "視頻", "Java SE", "Android", "Html5", "我不喜歡"};private static String[] testName = {"日歷", "360", "三國", "消除", "播放器","游戲", "清理大師", "跑酷", "壁紙", "單機斗地主","捕魚達人3", "雷電2014(雷霆版)", "打車", "輸入法"};private String title;//private WarpLinearLayout warpLinearLayout;private Button btn;private AutoLayoutView layoutView;private List<AutoData> dataList;private String autoName[] = new String[]{"降龍", "黯然", "左右", "七十", "拈花", "蛤蟆", "吸星", "打狗", "醉拳"}; // String atuoUrl[]=new String[]{""};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tabHost = findViewById(R.id.tabhost);mList = new ArrayList<>();for (int i = 0; i < strTiele.length; i++) {mList.add(strTiele[i]);}tabHost.diaplay(mList);initWarpData();initAutoIcon();}private void initWarpData() {btn = (Button) findViewById(R.id.btn);warpLinearLayout = (WarpLinearLayout) findViewById(R.id.warpLinearLayout);for (int j = 0; j < 11; j++) {int n = new Random().nextInt(10) + 5;StringBuffer stringBuffer = new StringBuffer();Random random = new Random();Log.i(TAG, "n=" + n);for (int i = 0; i < n; i++) {stringBuffer.append((char) (65 + random.nextInt(26)));Log.i(TAG, "StringBuffer=" + stringBuffer.toString());}final TextView tv = new TextView(MainActivity.this);tv.setText(stringBuffer.toString() + "000");tv.setBackgroundResource(R.drawable.shape_text_border);tv.setTextColor(getResources().getColor(R.color.black));tv.setPadding(10, 10, 10, 10);warpLinearLayout.addView(tv);tv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "$ - " + tv.getText().toString() + " - $", Toast.LENGTH_SHORT).show();}});}/*** 單個添加*//*btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {int n = new Random().nextInt(10) + 5;StringBuffer stringBuffer = new StringBuffer();Random random = new Random();for (int i = 0; i < n; i++) {stringBuffer.append((char) (65 + random.nextInt(26)));}TextView tv = new TextView(MainActivity.this);tv.setText(stringBuffer.toString() + "000");tv.setBackgroundResource(R.drawable.shape_text_border);tv.setPadding(10, 10, 10, 10);warpLinearLayout.addView(tv);}});*/}private void initAutoIcon() {layoutView = findViewById(R.id.autoView);dataList = new ArrayList<AutoData>();for (int i = 0; i < autoName.length; i++) {AutoData autoData = new AutoData();autoData.setName(autoName[i]);autoData.setUrl("http://qcloudimg.ichongxin.com/menuicon/qiguantubiao/yimiao.png");dataList.add(autoData);}layoutView.addData(dataList);layoutView.setOnFlowLayoutListener(new AutoLayoutView.FlowLayoutListener() {@Overridepublic void onItemClick(View view, int poition) {Toast.makeText(MainActivity.this, "--> " + dataList.get(poition).getName() + " <--", Toast.LENGTH_SHORT).show();}});}// private final int SWITCH_PAGE = 0x00123; // // Handler mHandler = new Handler() { // @Override // public void handleMessage(Message msg) { // super.handleMessage(msg); // switch (msg.what) { // case SWITCH_PAGE: // //接收dialog點擊以后得返回數(shù)據(jù) // title = msg.getData().getString("type_name"); // Log.i(TAG, "handleMessage: " + title); // break; // } // } // }; }

    最后在貼上布局文件activity_main.xml

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><ScrollViewandroid:layout_width="match_parent"android:layout_height="wrap_content"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:gravity="center|left"android:text="滑動控件居中顯示"android:textColor="#000" /><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="#FFF"><com.auto.widget.view.HorizontalScollTabHostandroid:id="@+id/tabhost"android:layout_width="match_parent"android:layout_height="40dp"android:layout_marginRight="48dp"android:layout_marginTop="5dp" /><ImageViewandroid:id="@+id/mall_more_image"android:layout_width="45dp"android:layout_height="35dp"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:layout_marginBottom="8dp"android:layout_marginTop="8dp"android:src="@mipmap/more" /></RelativeLayout><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:text="自動換行顯示控件(根據(jù)布局或者單個控件來顯示)"android:textColor="#000" /><Buttonandroid:id="@+id/btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="add"android:textSize="20dp"android:visibility="gone" /><com.auto.widget.view.WarpLinearLayoutandroid:id="@+id/warpLinearLayout"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/btn"android:background="#FFF"android:padding="10dp"app:grivate="left"app:horizontal_Space="10dp"app:isFull="false"app:vertical_Space="10dp"></com.auto.widget.view.WarpLinearLayout><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:text="自動換行顯示圖標控件(同上)"android:textColor="#000" /><com.auto.widget.view.AutoLayoutViewandroid:id="@+id/autoView"android:layout_width="wrap_content"android:layout_height="wrap_content"></com.auto.widget.view.AutoLayoutView><Viewandroid:layout_width="match_parent"android:layout_height="20dp" /></LinearLayout></ScrollView> </RelativeLayout>

    第一個功能的全部代碼就已經(jīng)全部貼完了,最后附上下載鏈接:

    CSDN(跪求有分的大佬下載這個,攢點分^_^):https://download.csdn.net/download/wjilikely/10596183

    GitHub:https://github.com/wangjiand/AutoLayoutView-master

    總結

    以上是生活随笔為你收集整理的Android 自动换行添加控件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。