Commit 783cec50 authored by wanglei's avatar wanglei

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	app/src/main/java/com/base/browserwhite/ui/activity/MainActivity.kt
parents 77f632a6 163e8389
...@@ -139,7 +139,10 @@ dependencies { ...@@ -139,7 +139,10 @@ dependencies {
// RxJava 3.1.3 // RxJava 3.1.3
implementation("io.reactivex.rxjava3:rxjava:3.1.3") implementation("io.reactivex.rxjava3:rxjava:3.1.3")
implementation("io.reactivex.rxjava3:rxandroid:3.0.0") implementation("io.reactivex.rxjava3:rxandroid:3.0.0")
//facebook //facebook
implementation("org.greenrobot:eventbus:3.0.0")
implementation("com.facebook.android:facebook-android-sdk:[8,9)") implementation("com.facebook.android:facebook-android-sdk:[8,9)")
// implementation("com.zhy:percent-support-extends:1.1.1")
} }
\ No newline at end of file
...@@ -98,6 +98,12 @@ ...@@ -98,6 +98,12 @@
android:launchMode="singleTop" android:launchMode="singleTop"
android:screenOrientation="portrait" android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" /> tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".label.LabelActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity <activity
android:name=".ui.activity.webbrowser.WebBrowserActivity" android:name=".ui.activity.webbrowser.WebBrowserActivity"
android:exported="true" android:exported="true"
......
package com.base.browserwhite.label.constance;
import com.base.browserwhite.label.fragment.mainFrag;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2016/8/20.
*/
public class fragConst {
public static List<mainFrag> fraglist=new ArrayList<>(); //fraglist和fraghashcode成对出现
public static List<String> fraghashcode=new ArrayList<>(); //存储对象的hashcode
public static int page_interval=40; //界面之间的间隔
public static int init_page_count=1; //初始化的界面个数
public static int new_mainfrag_count=0; // mainFrag类构造函数被调用的次数
}
package com.base.browserwhite.label.custom;
import android.view.GestureDetector;
import android.view.MotionEvent;
import com.base.browserwhite.label.event.slideEvent;
import org.greenrobot.eventbus.EventBus;
/**
* Created by Administrator on 2016/8/23.
*/
public class mainActivitySimpleOnGestureListener extends GestureDetector.SimpleOnGestureListener {
private int mViewpageX,mViewpageY,mViewpageWidth,mViewpageHeight;
public void setViewPagePosition(int mViewpageWidth,int mViewpageHeight ){
this.mViewpageWidth = mViewpageWidth*7/10;
this.mViewpageHeight = mViewpageHeight*7/10;
this.mViewpageX = (mViewpageWidth /2)-(mViewpageWidth*7/10/2 );
this.mViewpageY = (mViewpageHeight /2)-(mViewpageHeight*7/10/2 );;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
// Logger.v("onFling "+ "x: "+e1.getX() +" y: "+e1.getY() +"x: "+e2.getX() +" y: "+e2.getY() );
JudgeSendEvent("onFling",e1,e2);
return super.onFling(e1, e2, velocityX, velocityY);
}
@Override
public boolean onDown(MotionEvent e) {
// Logger.v("onDown "+ "x: "+e.getX() +" y: "+e.getY() );
JudgeSendEvent("onDown",e,null);
return super.onDown(e);
}
//判断是否发出事件
private void JudgeSendEvent(String action,MotionEvent e1, MotionEvent e2){
switch (action ){
case "onFling":
if(e1.getX()<mViewpageX && e1.getY()>mViewpageY && e1.getY()<(mViewpageY+mViewpageHeight) ){
if( e2.getX()-e1.getX() >20 ){
// Logger.v(" 向右滑动 ");
EventBus.getDefault().post(new slideEvent(MotionEvent.ACTION_MOVE, "right")); // 发送消息
}else if(e1.getX()-e2.getX() >20){
// Logger.v(" 向左滑动 ");
EventBus.getDefault().post(new slideEvent(MotionEvent.ACTION_MOVE,"left" ));
}
}
else if(e1.getX()>(mViewpageX+ mViewpageWidth)&& e1.getY()>mViewpageY && e1.getY()<(mViewpageY+mViewpageHeight) ){
if( e2.getX()-e1.getX() >20 ){
EventBus.getDefault().post(new slideEvent(MotionEvent.ACTION_MOVE, "right"));
// Logger.v(" 向右滑动 ");
}else if(e1.getX()-e2.getX() >20){
// Logger.v(" 向左滑动 ");
EventBus.getDefault().post(new slideEvent(MotionEvent.ACTION_MOVE, "left"));
}
}
break;
case "onDown":
// Logger.v( " onDown "+e1.getX()+" "+e1.getY()
// +"\n mViewpageX "+mViewpageX +" mViewpageWidth "+mViewpageWidth
// +"\n mViewpageY "+mViewpageY +" mViewpageWidth "+mViewpageHeight);
if(e1.getX()<mViewpageX && e1.getY()>mViewpageY && e1.getY()<(mViewpageY+mViewpageHeight) ){
// Logger.v( " onDown left " );
EventBus.getDefault().post(new slideEvent(MotionEvent.ACTION_DOWN, "left"));
}
else if(e1.getX()>(mViewpageX+ mViewpageWidth)&& e1.getY()>mViewpageY && e1.getY()<(mViewpageY+mViewpageHeight) ){
EventBus.getDefault().post(new slideEvent(MotionEvent.ACTION_DOWN, "right"));
//Logger.v( " onDown right " );
}
break;
}
}
}
package com.base.browserwhite.label.customview;
/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
/**
* Subclass of {@link RelativeLayout} that supports percentage based dimensions and
* margins.
*
* You can specify dimension or a margin of child by using attributes with "Percent" suffix. Follow
* this example:
*
* <pre class="prettyprint">
* &lt;android.support.percent.PercentRelativeLayout
* xmlns:android="http://schemas.android.com/apk/res/android"
* xmlns:app="http://schemas.android.com/apk/res-auto"
* android:layout_width="match_parent"
* android:layout_height="match_parent"/&gt
* &lt;ImageView
* app:layout_widthPercent="50%"
* app:layout_heightPercent="50%"
* app:layout_marginTopPercent="25%"
* app:layout_marginLeftPercent="25%"/&gt
* &lt;/android.support.percent.PercentFrameLayout/&gt
* </pre>
*
* The attributes that you can use are:
* <ul>
* <li>{@code layout_widthPercent}
* <li>{@code layout_heightPercent}
* <li>{@code layout_marginPercent}
* <li>{@code layout_marginLeftPercent}
* <li>{@code layout_marginTopPercent}
* <li>{@code layout_marginRightPercent}
* <li>{@code layout_marginBottomPercent}
* <li>{@code layout_marginStartPercent}
* <li>{@code layout_marginEndPercent}
* </ul>
*
* It is not necessary to specify {@code layout_width/height} if you specify {@code
* layout_widthPercent.} However, if you want the view to be able to take up more space than what
* percentage value permits, you can add {@code layout_width/height="wrap_content"}. In that case
* if the percentage size is too small for the View's content, it will be resized using
* {@code wrap_content} rule.
*/
public class PercentRelativeLayout extends RelativeLayout {
private final PercentLayoutHelper mHelper = new PercentLayoutHelper(this);
public PercentRelativeLayout(Context context) {
super(context);
}
public PercentRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public PercentRelativeLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public LayoutParams generateLayoutParams(AttributeSet attrs) {
return new LayoutParams(getContext(), attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
mHelper.adjustChildren(widthMeasureSpec, heightMeasureSpec);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (mHelper.handleMeasuredStateTooSmall()) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
mHelper.restoreOriginalParams();
}
public static class LayoutParams extends RelativeLayout.LayoutParams
implements PercentLayoutHelper.PercentLayoutParams {
private PercentLayoutHelper.PercentLayoutInfo mPercentLayoutInfo;
public LayoutParams(Context c, AttributeSet attrs) {
super(c, attrs);
mPercentLayoutInfo = PercentLayoutHelper.getPercentLayoutInfo(c, attrs);
}
public LayoutParams(int width, int height) {
super(width, height);
}
public LayoutParams(ViewGroup.LayoutParams source) {
super(source);
}
public LayoutParams(MarginLayoutParams source) {
super(source);
}
@Override
public PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo() {
return mPercentLayoutInfo;
}
@Override
protected void setBaseAttributes(TypedArray a, int widthAttr, int heightAttr) {
PercentLayoutHelper.fetchWidthAndHeight(this, a, widthAttr, heightAttr);
}
}
}
\ No newline at end of file
package com.base.browserwhite.label.customview;
import android.content.Context;
import android.util.AttributeSet;
import androidx.viewpager.widget.ViewPager;
/**
* Created by Administrator on 2016/8/24.
*/
/*
* 在普通 ViewPager 上实现向上滑动删除 一个Item
*/
public class verticalViewPager extends ViewPager {
public verticalViewPager(Context context) {
super(context);
}
public verticalViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
package com.base.browserwhite.label.event;
/**
* Created by Administrator on 2016/8/23.
*/
public class baseEvent {
}
package com.base.browserwhite.label.event;
/**
* Created by Administrator on 2016/8/25.
*/
public class delThisFrag extends baseEvent {
//fragment发出,通知anctvity删除自己
}
package com.base.browserwhite.label.event;
/**
* Created by Administrator on 2016/8/24.
*/
public class deleteFragEvent extends baseEvent {
//如果fragment 上滑到一半,就会发出删除信号
String fragTag;
public deleteFragEvent(String fragTag) {
this.fragTag = fragTag;
}
public String getFragTag() {
return fragTag;
}
public void setFragTag(String fragTag) {
this.fragTag = fragTag;
}
}
package com.base.browserwhite.label.event;
/**
* Created by Administrator on 2016/8/23.
*/
public class fragEvent extends baseEvent{
//用于传递 fragment的tag
String fragTag;
public fragEvent(String fragTag) {
this.fragTag = fragTag;
}
public String getFragTag() {
return fragTag;
}
public void setFragTag(String fragTag) {
this.fragTag = fragTag;
}
}
package com.base.browserwhite.label.event;
/**
* Created by Administrator on 2016/8/25.
*/
//显示删除按钮
public class showDelImg extends baseEvent {
private boolean isShow;
public showDelImg(boolean isShow) {
this.isShow = isShow;
}
public boolean isShow() {
return isShow;
}
public void setIsShow(boolean isShow) {
this.isShow = isShow;
}
}
package com.base.browserwhite.label.event;
/**
* Created by Administrator on 2016/8/23.
*/
//viewpager缩小后点击 viewpager控件的左边或者右边 发出的事件
public class slideEvent extends baseEvent {
private int type; //事件类型:点击 ACTION_DOWN ,滑动 ACTION_MOVE
private String direction;//点击位置 或者 滑动方向
public slideEvent(int type, String direction) {
this.type = type;
this.direction = direction;
}
public int getType() {
return type;
}
public String getDirection() {
return direction;
}
public void setType(int type) {
this.type = type;
}
public void setDirection(String direction) {
this.direction = direction;
}
}
package com.base.browserwhite.label.event;
/**
* Created by Administrator on 2016/8/25.
*/
public class zoomEvent extends baseEvent {
//viewpager当前的状态,放大或缩小
private boolean isMatchParent; //viewpager 当前是不是 MatchParent
public zoomEvent(boolean isMatchParent) {
this.isMatchParent = isMatchParent;
}
public boolean isMatchParent() {
return isMatchParent;
}
public void setIsMatchParent(boolean isMatchParent) {
this.isMatchParent = isMatchParent;
}
}
package com.base.browserwhite.label.fragment;
import android.view.MotionEvent;
import android.view.View;
import androidx.fragment.app.Fragment;
/**
* Created by Administrator on 2016/8/23.
*/
public class baseFrag extends Fragment implements View.OnTouchListener {
protected float point_x, point_y; //手指按下的位置
private boolean flag;
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
point_x = event.getX();
point_y = event.getY();
flag = false;
}
return true;
}
}
package com.base.browserwhite.label.fragment;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import com.base.browserwhite.label.constance.fragConst;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
/**
* Created by Administrator on 2016/8/20.
*/
public class fragAdapter extends FragmentStatePagerAdapter {
private Context context;
private FragmentManager fm;
public fragAdapter(Context context,FragmentManager fm) {
super(fm);
this.context = context;
this.fm=fm;
}
@Override
public Fragment getItem(int position) {
return fragConst.fraglist.get(position);
}
@Override
public int getCount() {
// Logger.v("fragConst.fraglist.size() "+fragConst.fraglist.size());
return fragConst.fraglist.size();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
return super.instantiateItem(container, position);
}
@Override
public int getItemPosition(Object object) {
// try {
// Method method = object.getClass().getMethod(("getFragTag"),new Class[0] );
// String tag= (String) method.invoke(object,new Object[0]);
// if( isDel ){
// if( tag.equals(""+id ) ){
// Logger.d("删除项tag= "+tag+ " id= " + id );
// return POSITION_NONE;
// }else {
// return POSITION_UNCHANGED;
// }
// }else {
// return POSITION_UNCHANGED;
// }
// } catch (NoSuchMethodException e) {
// e.printStackTrace();
// } catch (InvocationTargetException e) {
// Logger.d("getItemPosition InvocationTargetException" );
// e.printStackTrace();
// } catch (IllegalAccessException e) {
// Logger.d("getItemPosition IllegalAccessException" );
// e.printStackTrace();
// }
//需要实现一种机制避免更新所有的fragment
return POSITION_NONE;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
}
}
package com.base.browserwhite.label.fragment;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import com.base.browserwhite.R;
import com.base.browserwhite.label.event.delThisFrag;
import com.base.browserwhite.label.event.deleteFragEvent;
import com.base.browserwhite.label.event.fragEvent;
import com.base.browserwhite.label.event.showDelImg;
import com.base.browserwhite.label.event.zoomEvent;
import com.base.browserwhite.label.constance.fragConst;
import com.base.browserwhite.label.event.baseEvent;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* Created by Administrator on 2016/8/20.
*/
public class mainFrag extends baseFrag {
private RelativeLayout mainrlt;
private TextView showtitletv;
private LinearLayout showtitlelt;
private FrameLayout rootlt;
private DisplayMetrics dm2;
private String fragTag = "";
private ImageView delthispage;
private boolean isNewFragment = false;
private int color;
public mainFrag() {
this.fragTag = fragConst.new_mainfrag_count + "";
fragConst.new_mainfrag_count++;
isNewFragment = true;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_label, container, false);
mainrlt = (RelativeLayout) view.findViewById(R.id.mainrlt);
mainrlt.setOnTouchListener(this);
rootlt = (FrameLayout) view.findViewById(R.id.rootlt);
rootlt.setOnTouchListener(this);
delthispage = (ImageView) view.findViewById(R.id.delthispage);
showtitlelt = (LinearLayout) view.findViewById(R.id.showtitlelt);
showtitletv = (TextView) view.findViewById(R.id.showtitletv);
EventBus.getDefault().register(this);
init(view);
return view;
}
private void init(View view) {
dm2 = getResources().getDisplayMetrics();
TextView showtag = (TextView) view.findViewById(R.id.showtag);
showtag.setText("当前fragment " + getFragTag());
delthispage.setOnClickListener(View -> {
delAnime();
new Handler().postDelayed(() -> {
EventBus.getDefault().post(new delThisFrag()); // 发送消息
}, 300);
});
if ((fragConst.new_mainfrag_count > 1) && isNewFragment) {
//缩小
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("scaleX", 0.1f, 1f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("scaleY", 0.1f, 1f);
ObjectAnimator scale = ObjectAnimator.ofPropertyValuesHolder(rootlt, pvhX, pvhY);
scale.setDuration(50);
scale.start();
Random random = new Random();
color = Color.rgb(random.nextInt(256), random.nextInt(256), random.nextInt(256));
}
isNewFragment = false;
if (color != 0) {
mainrlt.setBackgroundColor(color);
}
}
public String getFragTag() { // 被反射的方法
return fragTag;
}
public void setFragTag(String fragTag) {
this.fragTag = fragTag;
}
private float mov_x, mov_y; //相对于手指移动了的位置
private int left, right, top, bottom;
private List<int[]> positionlist = new ArrayList<>();
@Override
public boolean onTouch(View v, MotionEvent event) {
super.onTouch(v, event);
if (event.getAction() == MotionEvent.ACTION_DOWN) {
positionlist.clear();
}
if (event.getAction() == MotionEvent.ACTION_MOVE) {
// Logger.v("x: " + event.getX() + " y: " + event.getY());
mov_x = event.getX() - super.point_x;
mov_y = event.getY() - super.point_y;
left = mainrlt.getLeft();
right = mainrlt.getRight();
top = mainrlt.getTop();
bottom = mainrlt.getBottom();
if (Math.abs(dm2.widthPixels - mainrlt.getWidth()) > 5) {
mainrlt.layout(left, top + (int) mov_y, right, bottom + (int) mov_y);
int[] position = {left, top + (int) mov_y, right, bottom + (int) mov_y};
positionlist.add(position);
// Logger.v("left " + position[0] + " top " + position[1] + " right " + position[2] + " bottom " + position[3] );
if (Math.abs(position[1]) > mainrlt.getWidth() / 2) {
// Logger.v("- 显示 删除 按钮 -");
EventBus.getDefault().post(new showDelImg(true)); // 发送消息
} else {
EventBus.getDefault().post(new showDelImg(false)); // 发送消息
}
}
}
if (event.getAction() == MotionEvent.ACTION_UP) {
if (positionlist.size() >= 2) {
if (fragConst.fraglist.size()>1 && Math.abs(positionlist.get(positionlist.size() - 1)[1]) > mainrlt.getWidth() / 2) {
// Logger.v("- 删除 fragment -");
delAnime();
EventBus.getDefault().post(new showDelImg(false)); // 发送消息
new Handler().postDelayed(() -> {
EventBus.getDefault().post(new deleteFragEvent(getFragTag())); // 发送消息
}, 200);
return true;
}
} else {
//放大或者缩小fragment
EventBus.getDefault().post(new fragEvent(getFragTag())); // 发送消息
}
for (int i = positionlist.size() - 1; i >= 0; i--) {
mainrlt.layout(positionlist.get(i)[0], positionlist.get(i)[1], positionlist.get(i)[2], positionlist.get(i)[3]);
}
mainrlt.layout(0, 0, mainrlt.getWidth(), mainrlt.getHeight());
}
return true;
}
//删除动画
private void delAnime() {
if (fragConst.fraglist.size() <= 1) {
return;
}
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("scaleX", 1f, 0.01f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("scaleY", 1f, 0.01f);
ObjectAnimator scalexy = ObjectAnimator.ofPropertyValuesHolder(mainrlt, pvhX, pvhY);
ObjectAnimator scale = ObjectAnimator.ofFloat(mainrlt, "translationY", 0, -2500);
scale.setDuration(200);
scalexy.setDuration(200);
scale.start();
scalexy.start();
}
@Subscribe
public void onEventMainThread(baseEvent event) {
// Toast.makeText(getActivity(), " 收到 event 数据 ", 0).show();
if (event instanceof zoomEvent) {
if (((zoomEvent) event).isMatchParent()) {
showtitlelt.setVisibility(View.INVISIBLE);
} else {
showtitlelt.setVisibility(View.VISIBLE);
}
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
EventBus.getDefault().unregister(this);
}
}
...@@ -92,6 +92,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() { ...@@ -92,6 +92,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
} }
addDeskShortCut() addDeskShortCut()
} }
......
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rootlt"
>
<RelativeLayout
android:id="@+id/mainrlt"
android:background="#a0FFFF00"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/showtitlelt"
android:visibility="invisible"
android:orientation="vertical"
android:background="#50000000"
android:layout_alignParentTop="true"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:text="LeLo"
android:id="@+id/showtitletv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<TextView
android:textSize="40dp"
android:id="@+id/showtag"
android:text="showtag"
android:textColor="#FFFFFF"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:orientation="vertical"
android:background="#50000000"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_margin="5dp"
android:id="@+id/delthispage"
android:layout_gravity="center_horizontal"
android:background="@mipmap/reddit_115_local"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</RelativeLayout>
</FrameLayout>
<?xml version="1.0" encoding="utf-8"?>
<com.base.browserwhite.label.customview.PercentRelativeLayout 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:id="@+id/mainrootrl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:background="#b0000000"
android:clipChildren="false"
android:layerType="software">
<LinearLayout
android:id="@+id/llayoutviewpage"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_centerInParent="true"
android:clickable="true"
android:clipChildren="false"
android:orientation="vertical"
app:layout_heightPercent="100%h"
app:layout_widthPercent="100%w">
<com.base.browserwhite.label.customview.verticalViewPager
android:id="@+id/mainviewpage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false"></com.base.browserwhite.label.customview.verticalViewPager>
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/delfrag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="15dp"
android:background="@mipmap/del_chip"
android:visibility="invisible" />
</RelativeLayout>
<LinearLayout
android:id="@+id/mainbarlt"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_alignParentBottom="true"
android:orientation="vertical"
app:layout_heightPercent="8%h"
app:layout_widthPercent="100%w">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:layout_width="fill_parent"
android:layout_height="1px"
android:layout_weight="1"
android:background="#000000">
</View>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:orientation="horizontal">
<ImageView
android:id="@+id/leftbt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@mipmap/ebay"
app:layout_marginLeftPercent="20%w" />
<ImageView
android:id="@+id/rightbt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@mipmap/right_n" />
<ImageView
android:id="@+id/setbt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@mipmap/search_bookmark" />
<TextView
android:id="@+id/pagebt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@mipmap/s_del"
android:gravity="center"
android:text="1" />
<ImageView
android:id="@+id/homebt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@mipmap/home" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/pagebarlt"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_alignParentBottom="true"
android:layout_centerInParent="true"
android:orientation="vertical"
android:visibility="invisible"
app:layout_heightPercent="8%h"
app:layout_widthPercent="40%w">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/addnewpage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@mipmap/m_add_widget"
app:layout_marginLeftPercent="20%w" />
<ImageView
android:id="@+id/returnmain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@mipmap/reddit_115_local" />
</LinearLayout>
</LinearLayout>
</com.base.browserwhite.label.customview.PercentRelativeLayout>
...@@ -4,4 +4,31 @@ ...@@ -4,4 +4,31 @@
<attr name="appWidgetInnerRadius" format="dimension" /> <attr name="appWidgetInnerRadius" format="dimension" />
<attr name="appWidgetRadius" format="dimension" /> <attr name="appWidgetRadius" format="dimension" />
</declare-styleable> </declare-styleable>
<declare-styleable name="PercentLayout_Layout">
<attr name="layout_widthPercent" format="string"/>
<attr name="layout_heightPercent" format="string"/>
<attr name="layout_marginPercent" format="string"/>
<attr name="layout_marginLeftPercent" format="string"/>
<attr name="layout_marginTopPercent" format="string"/>
<attr name="layout_marginRightPercent" format="string"/>
<attr name="layout_marginBottomPercent" format="string"/>
<attr name="layout_marginStartPercent" format="string"/>
<attr name="layout_marginEndPercent" format="string"/>
<attr name="layout_textSizePercent" format="string"/>
<attr name="layout_maxWidthPercent" format="string"/>
<attr name="layout_maxHeightPercent" format="string"/>
<attr name="layout_minWidthPercent" format="string"/>
<attr name="layout_minHeightPercent" format="string"/>
<attr name="layout_paddingPercent" format="string"/>
<attr name="layout_paddingTopPercent" format="string"/>
<attr name="layout_paddingBottomPercent" format="string"/>
<attr name="layout_paddingLeftPercent" format="string"/>
<attr name="layout_paddingRightPercent" format="string"/>
</declare-styleable>
</resources> </resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment