Android 仿京东搜索页面

  • Post author:
  • Post category:其他



//自定义title

package com.bawei.com.zhouliumoni1.Views;

import android.content.Context;

import android.util.AttributeSet;

import android.view.LayoutInflater;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.ImageView;

import android.widget.RelativeLayout;

import android.widget.TextView;

import com.bawei.com.zhouliumoni1.R;

/**

* Created by lenovo on 2017/12/30.

*/

public class Mytitle extends RelativeLayout {

private onsetHuida onsethuida;

private EditText et;

private ImageView img;

private TextView tvv;

public Mytitle(Context context) {

this(context, null);

}

public Mytitle(Context context, AttributeSet attrs) {

this(context, attrs, 0);

}

public Mytitle( Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

LayoutInflater from = LayoutInflater.from(context);

View inflate = from.inflate(R.layout.title_main, this, true);

img = (ImageView)inflate.findViewById(R.id.img);

tvv = inflate.findViewById(R.id.tvv);

et = (EditText)inflate.findViewById(R.id.et);

tvv.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

onsethuida.huida(et.getText().toString());

}

});

}

public interface onsetHuida{

void huida(String aa);

}

public void setJiekou(onsetHuida onsethuida){

this.onsethuida=onsethuida;

}

}

//流失布局

package com.bawei.com.zhouliumoni1.Views;

import android.content.Context;

import android.util.AttributeSet;

import android.view.View;

import android.view.ViewGroup;

import java.util.ArrayList;

import java.util.List;

/**

* Created by lenovo on 2018/1/1.

*/

public class XCFlowLayout  extends ViewGroup {

//存储所有子View

private List<List<View>> mAllChildViews = new ArrayList<>();

//每一行的高度

private List<Integer> mLineHeight = new ArrayList<>();

public XCFlowLayout(Context context) {

this(context,null);

}

public XCFlowLayout(Context context, AttributeSet attrs) {

super(context, attrs,0);

}

public XCFlowLayout(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

// TODO Auto-generated method stub

//父控件传进来的宽度和高度以及对应的测量模式

int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);

int modeWidth = MeasureSpec.getMode(widthMeasureSpec);

int sizeHeight = MeasureSpec.getSize(heightMeasureSpec);

int modeHeight = MeasureSpec.getMode(heightMeasureSpec);

//如果当前ViewGroup的宽高为wrap_content的情况

int width = 0;//自己测量的 宽度

int height = 0;//自己测量的高度

//记录每一行的宽度和高度

int lineWidth = 0;

int lineHeight = 0;

//获取子view的个数

int childCount = getChildCount();

for(int i = 0;i < childCount; i ++){

View child = getChildAt(i);

//测量子View的宽和高

measureChild(child, widthMeasureSpec, heightMeasureSpec);

//得到LayoutParams

MarginLayoutParams lp = (MarginLayoutParams) getLayoutParams();

//子View占据的宽度

int childWidth = child.getMeasuredWidth() + lp.leftMargin + lp.rightMargin;

//子View占据的高度

int childHeight = child.getMeasuredHeight() + lp.topMargin + lp.bottomMargin;

//换行时候

if(lineWidth + childWidth > sizeWidth){

//对比得到最大的宽度

width = Math.max(width, lineWidth);

//重置lineWidth

lineWidth = childWidth;

//记录行高

height += lineHeight;

lineHeight = childHeight;

}else{//不换行情况

//叠加行宽

lineWidth += childWidth;

//得到最大行高

lineHeight = Math.max(lineHeight, childHeight);

}

//处理最后一个子View的情况

if(i == childCount -1){

width = Math.max(width, lineWidth);

height += lineHeight;

}

}

//wrap_content

setMeasuredDimension(modeWidth == MeasureSpec.EXACTLY ? sizeWidth : width,

modeHeight == MeasureSpec.EXACTLY ? sizeHeight : height);

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

}

@Override

protected void onLayout(boolean changed, int l, int t, int r, int b) {

mAllChildViews.clear();

mLineHeight.clear();

//获取当前ViewGroup的宽度

int width = getWidth();

int lineWidth = 0;

int lineHeight = 0;

//记录当前行的view

List<View> lineViews = new ArrayList<View>();

int childCount = getChildCount();

for(int i = 0;i < childCount; i ++){

View child = getChildAt(i);

MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams();

int childWidth = child.getMeasuredWidth();

int childHeight = child.getMeasuredHeight();

//如果需要换行

if(childWidth + lineWidth + lp.leftMargin + lp.rightMargin > width){

//记录LineHeight

mLineHeight.add(lineHeight);

//记录当前行的Views

mAllChildViews.add(lineViews);

//重置行的宽高

lineWidth = 0;

lineHeight = childHeight + lp.topMargin + lp.bottomMargin;

//重置view的集合

lineViews = new ArrayList();

}

lineWidth += childWidth + lp.leftMargin + lp.rightMargin;

lineHeight = Math.max(lineHeight, childHeight + lp.topMargin + lp.bottomMargin);

lineViews.add(child);

}

//处理最后一行

mLineHeight.add(lineHeight);

mAllChildViews.add(lineViews);

//设置子View的位置

int left = 0;

int top = 0;

//获取行数

int lineCount = mAllChildViews.size();

for(int i = 0; i < lineCount; i ++){

//当前行的views和高度

lineViews = mAllChildViews.get(i);

lineHeight = mLineHeight.get(i);

for(int j = 0; j < lineViews.size(); j ++){

View child = lineViews.get(j);

//判断是否显示

if(child.getVisibility() == View.GONE){

continue;

}

MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams();

int cLeft = left + lp.leftMargin;

int cTop = top + lp.topMargin;

int cRight = cLeft + child.getMeasuredWidth();

int cBottom = cTop + child.getMeasuredHeight();

//进行子View进行布局

child.layout(cLeft, cTop, cRight, cBottom);

left += child.getMeasuredWidth() + lp.leftMargin + lp.rightMargin;

}

left = 0;

top += lineHeight;

}

}

/**

* 与当前ViewGroup对应的LayoutParams

*/

@Override

public LayoutParams generateLayoutParams(AttributeSet attrs) {

// TODO Auto-generated method stub

return new MarginLayoutParams(getContext(), attrs);

}

}


//MainAcitivy主类


package com.bawei.com.zhouliumoni1;

import android.graphics.Color;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.Button;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.Toast;

import com.bawei.com.zhouliumoni1.Views.Mytitle;

import com.bawei.com.zhouliumoni1.Views.XCFlowLayout;

import java.util.ArrayList;

import java.util.List;

public class MainActivity extends AppCompatActivity {


private String mNames[] = {


“welcome”,”android”,”TextView”,

“apple”,”jamy”,”kobe bryant”,

“jordan”,”layout”,”viewgroup”,

“margin”,”padding”,”text”,

“name”,”type”,”search”,”logcat”

};

private XCFlowLayout mFlowLayout;

private ListView lv;

private Mytitle mtl;

private Button bt;

private List<String> list=new ArrayList<String>();

@Override

protected void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mFlowLayout = (XCFlowLayout) findViewById(R.id.flowlayout);

lv = (ListView) findViewById(R.id.lv);

mtl = (Mytitle) findViewById(R.id.mtl);

bt = (Button) findViewById(R.id.bt);

bt.setOnClickListener(new View.OnClickListener() {


@Override

public void onClick(View v) {


list.clear();

lv.setAdapter(new myBaseAdapter());

}

});

initChildViews();

jilu();

}

public  void initChildViews() {


// TODO Auto-generated method stub

ViewGroup.MarginLayoutParams lp = new ViewGroup.MarginLayoutParams(

ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

lp.leftMargin = 5;

lp.rightMargin = 5;

lp.topMargin = 5;

lp.bottomMargin = 5;

for( int i = 0; i < mNames.length; i ++){


TextView view = new TextView(this);

view.setText(mNames[i]);

view.setTextColor(Color.WHITE);

view.setBackgroundDrawable(getResources().getDrawable(R.drawable.shape));

mFlowLayout.addView(view,lp);

final int finalI = i;

view.setOnClickListener(new View.OnClickListener() {


@Override

public void onClick(View v) {

list.add(mNames[finalI]);

lv.setAdapter(new myBaseAdapter());

}

});

}

}

public void jilu(){

mtl.setJiekou(new Mytitle.onsetHuida() {


@Override

public void huida(String aa) {


Toast.makeText(MainActivity.this, aa+””, Toast.LENGTH_SHORT).show();

list.add(aa);

lv.setAdapter(new myBaseAdapter());

}

});

lv.setAdapter(new myBaseAdapter());

}

class myBaseAdapter  extends BaseAdapter{

@Override

public int getCount() {


return list.size();

}

@Override

public Object getItem(int position) {


return null;

}

@Override

public long getItemId(int position) {


return 0;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {


ViewHold hold=null;

if(convertView==null){


if(hold==null){


hold=new ViewHold();

convertView=View.inflate(MainActivity.this,R.layout.layout,null);

hold.tv = convertView.findViewById(R.id.tvv1);

}

convertView.setTag(hold);

}else{

hold = (ViewHold) convertView.getTag();

}

hold.tv.setText(list.get(position));

return convertView;

}

}

class ViewHold{


TextView tv;

}

}



//布局xml


.



MainActivity



<?xml version=”1.0″ encoding=”utf-8″?>

<LinearLayout 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”

android:orientation=”vertical”

tools:context=”com.bawei.com.zhouliumoni1.MainActivity”>

<com.bawei.com.zhouliumoni1.Views.Mytitle

android:id=”@+id/mtl”

android:layout_width=”wrap_content”

android:layout_height=”wrap_content” />

<TextView

android:id=”@+id/textView”

android:layout_width=”match_parent”

android:layout_height=”wrap_content”

android:text=”热搜”

android:textSize=”50dp” />

<RelativeLayout

android:id=”@+id/container”

android:layout_width=”match_parent”

android:layout_height=”150dp”>

<com.bawei.com.zhouliumoni1.Views.XCFlowLayout

android:id=”@+id/flowlayout”

android:layout_width=”match_parent”

android:layout_height=”150dp”>

</com.bawei.com.zhouliumoni1.Views.XCFlowLayout>

</RelativeLayout>

<TextView

android:id=”@+id/tv”

android:layout_width=”match_parent”

android:layout_height=”wrap_content”

android:text=”历史记录”

android:textSize=”50dp” />

<ListView

android:id=”@+id/lv”

android:layout_width=”match_parent”

android:layout_height=”wrap_content” />

<Button

android:id=”@+id/bt”

android:layout_width=”match_parent”

android:layout_height=”wrap_content”

android:text=”清空历史记录”/>

</LinearLayout>





//流式布局·1


<?xml version=”1.0″ encoding=”utf-8″?>

<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”

android:orientation=”vertical”

android:layout_width=”match_parent”

android:layout_height=”match_parent”>

<TextView

android:id=”@+id/tvv1″

android:layout_width=”match_parent”

android:layout_height=”match_parent”/>

</LinearLayout>



//title布局


<?xml version=”1.0″ encoding=”utf-8″?>

<RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”

android:layout_width=”match_parent”

android:layout_height=”50dp”>

<TextView

android:id=”@+id/tv”

android:layout_width=”30dp”

android:layout_height=”30dp”

android:layout_alignParentLeft=”true”

android:text=”<”

android:textSize=”30sp” />

<RelativeLayout

android:layout_marginLeft=”30dp”

android:id=”@+id/rl”

android:layout_width=”350dp”

android:layout_height=”wrap_content”

android:layout_alignParentTop=”true”

android:layout_toEndOf=”@+id/tv”

android:layout_toRightOf=”@+id/tv”>

<ImageView

android:id=”@+id/img”

android:layout_width=”30dp”

android:layout_height=”wrap_content”

android:layout_alignParentLeft=”true”

android:src=”@drawable/order_find” />

<EditText

android:id=”@+id/et”

android:singleLine=”true”

android:layout_width=”300dp”

android:layout_height=”wrap_content”

android:hint=”美图超级品牌日,赢1127元卡”

android:paddingLeft=”50dp”

android:textSize=”20sp” />

<ImageView

android:layout_marginTop=”5dp”

android:id=”@+id/img1″

android:layout_width=”30dp”

android:layout_height=”30dp”

android:layout_alignParentRight=”true”

android:src=”@drawable/root” />

</RelativeLayout>

<TextView

android:id=”@+id/tvv”

android:layout_width=”50dp”

android:layout_height=”wrap_content”

android:layout_alignParentRight=”true”

android:text=”搜索”

android:textSize=”25sp” />

</RelativeLayout>





//建一个shape



<?xml version=”1.0″ encoding=”utf-8″?>

<shape  xmlns:android=”http://schemas.android.com/apk/res/android”>

<solid android:color=”#666666″ />

<corners android:radius=”10dp” />

<padding

android:left=”5dp”

android:right=”5dp”

android:top=”5dp”

android:bottom=”5dp”

/>

</shape >




//在style样式里


<style name=”text_flag_01″>

<item name=”android:layout_width”>wrap_content</item>

<item name=”android:layout_height”>wrap_content</item>

<item name=”android:layout_margin”>4dp</item>

<item name=”android:background”>#0ff</item>

<item name=”android:textColor”>#ffffff</item>

</style>













版权声明:本文为xiaozhang0414原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。