Commit 854c578b authored by leichao.gao's avatar leichao.gao

搜索的过渡动画,以及rxbus

parent 5c2b4c9a
...@@ -136,6 +136,9 @@ dependencies { ...@@ -136,6 +136,9 @@ dependencies {
implementation("com.google.mlkit:barcode-scanning:17.3.0") implementation("com.google.mlkit:barcode-scanning:17.3.0")
// Use this dependency to use the dynamically downloaded model in Google Play Services // Use this dependency to use the dynamically downloaded model in Google Play Services
// implementation ("com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1") // implementation ("com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1")
// RxJava 3.1.3
implementation("io.reactivex.rxjava3:rxjava:3.1.3")
implementation("io.reactivex.rxjava3:rxandroid:3.0.0")
//facebook //facebook
......
package com.base.browserwhite.help;
public class Constants {
public static final String CHANGE_SEARCH_TYPE="change_search_type";
}
package com.base.browserwhite.help;
import androidx.annotation.NonNull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.subjects.PublishSubject;
import io.reactivex.rxjava3.subjects.Subject;
/**
* Created by gaoleichao on 2018/3/26.
*/
public class RxBus {
private static final String TAG = RxBus.class.getSimpleName();
private static RxBus instance;
public final static boolean DEBUG = false;
public static synchronized RxBus get() {
if (null == instance) {
instance = new RxBus();
}
return instance;
}
private RxBus() {
}
private ConcurrentHashMap<Object, List<Subject>> subjectMapper = new ConcurrentHashMap<>();
public void clear() {
for (Object obj : subjectMapper.keySet()) {
List<Subject> subjects = subjectMapper.get(obj);
if (null != subjects) {
subjects.clear();
}
}
subjectMapper.clear();
}
public boolean isHasObservable(Object tag) {
if (subjectMapper.size() > 0) {
return subjectMapper.get(tag) != null;
}
return false;
}
@SuppressWarnings("unchecked")
public <T> Observable<T> register(@NonNull Object tag, @NonNull Class<T> clazz) {
List<Subject> subjectList = subjectMapper.get(tag);
if (null == subjectList) {
subjectList = new ArrayList<>();
subjectMapper.put(tag, subjectList);
}
Subject<T> subject;
subjectList.add(subject = PublishSubject.create());
return subject;
}
public void unregister(@NonNull Object tag, @NonNull Observable observable) {
List<Subject> subjects = subjectMapper.get(tag);
if (null != subjects) {
subjects.remove(observable);
if (isEmpty(subjects)) {
subjectMapper.remove(tag);
}
if (!observable.subscribe().isDisposed()) {
observable.subscribe().dispose();
}
}
}
public void post(@NonNull Object content) {
post(content.getClass().getName(), content);
}
@SuppressWarnings("unchecked")
public void post(@NonNull Object tag, @NonNull Object content) {
if (subjectMapper == null) {
return;
}
List<Subject> subjectList = subjectMapper.get(tag);
if (!isEmpty(subjectList)) {
for (Subject subject : subjectList) {
if (subject != null) {
subject.onNext(content);
}
}
}
}
public static boolean isEmpty(Collection collection) {
return null == collection || collection.isEmpty();
}
public static boolean isEmpty(Map map) {
return null == map || map.isEmpty();
}
public static boolean isEmpty(Object[] objs) {
return null == objs || objs.length <= 0;
}
public static boolean isEmpty(int[] objs) {
return null == objs || objs.length <= 0;
}
public static boolean isEmpty(CharSequence charSequence) {
return null == charSequence || charSequence.length() <= 0;
}
}
package com.base.browserwhite.ui.activity; package com.base.browserwhite.ui.activity;
import android.animation.Animator; import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator; import android.animation.ObjectAnimator;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Color; import android.graphics.Color;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.View; import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar;
import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.fragment.app.FragmentManager;
import com.base.browserwhite.MyApplication;
import com.base.browserwhite.R; import com.base.browserwhite.R;
import com.base.browserwhite.utils.BarUtils; import com.base.browserwhite.utils.BarUtils;
import com.google.android.material.appbar.AppBarLayout;
public class SearchActivity extends AppCompatActivity { public class SearchActivity extends AppCompatActivity {
@Override @Override
...@@ -37,6 +24,13 @@ public class SearchActivity extends AppCompatActivity { ...@@ -37,6 +24,13 @@ public class SearchActivity extends AppCompatActivity {
BarUtils.INSTANCE.setStatusBarLightMode(this, true); BarUtils.INSTANCE.setStatusBarLightMode(this, true);
BarUtils.INSTANCE.setStatusBarColor(this, Color.TRANSPARENT); BarUtils.INSTANCE.setStatusBarColor(this, Color.TRANSPARENT);
setContentView(R.layout.activity_search); setContentView(R.layout.activity_search);
ConstraintLayout layout = findViewById(R.id.appbar_layout);
CoordinatorLayout.LayoutParams layoutParams =(CoordinatorLayout.LayoutParams) layout.getLayoutParams();
int finalPosition = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16, getResources().getDisplayMetrics());
layoutParams.topMargin = BarUtils.INSTANCE.getStatusBarHeight()+finalPosition;
layout.setLayoutParams(layoutParams);
layout.setVisibility(View.VISIBLE);
} }
@SuppressLint("MissingSuperCall") @SuppressLint("MissingSuperCall")
...@@ -48,13 +42,11 @@ public class SearchActivity extends AppCompatActivity { ...@@ -48,13 +42,11 @@ public class SearchActivity extends AppCompatActivity {
} }
public static void startActivityWithButtonAnimation(Activity currentActivity, View button) { public static void startActivityWithButtonAnimation(Activity currentActivity, View button,int verticalOffset) {
int finalPosition = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16, currentActivity.getResources().getDisplayMetrics());
Log.d("glc","getHeight:"+-button.getHeight()); int buttonTop = button.getTop() - finalPosition;
Log.d("glc","getHeight:"+(-button.getHeight()-32f)); int distanceToTop = -buttonTop-verticalOffset;
int finalPosition = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 48, currentActivity.getResources().getDisplayMetrics()); ObjectAnimator animator = ObjectAnimator.ofFloat(button, "translationY", button.getTranslationY(), distanceToTop);
ObjectAnimator animator = ObjectAnimator.ofFloat(button, "translationY", button.getTranslationY(), -finalPosition);
animator.setDuration(500); animator.setDuration(500);
animator.addListener(new Animator.AnimatorListener() { animator.addListener(new Animator.AnimatorListener() {
@Override @Override
...@@ -78,7 +70,7 @@ public class SearchActivity extends AppCompatActivity { ...@@ -78,7 +70,7 @@ public class SearchActivity extends AppCompatActivity {
public void onAnimationRepeat(Animator animation) { public void onAnimationRepeat(Animator animation) {
} }
}); });
animator.start(); animator.start();
} }
} }
package com.base.browserwhite.ui.fragment package com.base.browserwhite.ui.fragment
import android.R.attr.button
import android.animation.ObjectAnimator import android.animation.ObjectAnimator
import android.content.Intent import android.content.Intent
import android.text.TextUtils import android.text.TextUtils
import android.util.Log
import android.view.KeyEvent import android.view.KeyEvent
import android.view.inputmethod.EditorInfo.IME_ACTION_DONE import android.view.inputmethod.EditorInfo.IME_ACTION_DONE
import android.widget.TextView import android.widget.TextView
...@@ -29,7 +27,9 @@ import com.base.browserwhite.bean.defaultValue ...@@ -29,7 +27,9 @@ import com.base.browserwhite.bean.defaultValue
import com.base.browserwhite.bean.webSiteGroupBeanList import com.base.browserwhite.bean.webSiteGroupBeanList
import com.base.browserwhite.databinding.FragmentHomeBinding import com.base.browserwhite.databinding.FragmentHomeBinding
import com.base.browserwhite.fcm.NotificationUtil import com.base.browserwhite.fcm.NotificationUtil
import com.base.browserwhite.help.Constants
import com.base.browserwhite.help.NewsUtils.requestNews import com.base.browserwhite.help.NewsUtils.requestNews
import com.base.browserwhite.help.RxBus
import com.base.browserwhite.ui.activity.SearchActivity import com.base.browserwhite.ui.activity.SearchActivity
import com.base.browserwhite.ui.activity.appprocess.AppProcessActivity import com.base.browserwhite.ui.activity.appprocess.AppProcessActivity
import com.base.browserwhite.ui.activity.bookmark.BookmarkActivity import com.base.browserwhite.ui.activity.bookmark.BookmarkActivity
...@@ -57,6 +57,9 @@ import com.base.browserwhite.utils.LogEx ...@@ -57,6 +57,9 @@ import com.base.browserwhite.utils.LogEx
import com.chad.library.adapter4.QuickAdapterHelper import com.chad.library.adapter4.QuickAdapterHelper
import com.chad.library.adapter4.loadState.LoadState import com.chad.library.adapter4.loadState.LoadState
import com.chad.library.adapter4.loadState.trailing.TrailingLoadStateAdapter import com.chad.library.adapter4.loadState.trailing.TrailingLoadStateAdapter
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.functions.Consumer
class HomeFragment : BaseFragment<FragmentHomeBinding>() { class HomeFragment : BaseFragment<FragmentHomeBinding>() {
...@@ -73,10 +76,17 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() { ...@@ -73,10 +76,17 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
private var headWebsiteAdapter: HeadWebsiteAdapter? = null private var headWebsiteAdapter: HeadWebsiteAdapter? = null
private var searchAction = ::getSpSearchAction private var searchAction = ::getSpSearchAction
private var searchEngine: String = GOOGLE private var searchEngine: String = GOOGLE
private var mChangeSearchType: Observable<String>? = null
override fun setView() { override fun setView() {
mChangeSearchType = RxBus.get().register(Constants.CHANGE_SEARCH_TYPE, String::class.java)
mChangeSearchType?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(object : Consumer<String> {
override fun accept(t: String) {
LogEx.logDebug("glc", "i:" + t)
switchSearch(t)
}
})
newsAdapter = NewsAdapter( newsAdapter = NewsAdapter(
clickAction = { url -> clickAction = { url ->
requireContext().startActivity( requireContext().startActivity(
...@@ -148,7 +158,12 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() { ...@@ -148,7 +158,12 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
BookmarkActivity::class.java BookmarkActivity::class.java
) )
) )
requireContext().startActivity(Intent(requireContext(), BookmarkActivity::class.java)) requireContext().startActivity(
Intent(
requireContext(),
BookmarkActivity::class.java
)
)
} }
} }
...@@ -172,13 +187,22 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() { ...@@ -172,13 +187,22 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
} }
} }
binding.appbarLayout.addOnOffsetChangedListener { appBarLayout, i ->
verticalOffset = i
}
y = binding.searchLayout.translationY y = binding.searchLayout.translationY
binding.editWeb.setOnClickListener { binding.editWeb.setOnClickListener {
SearchActivity.startActivityWithButtonAnimation(activity, binding.searchLayout) SearchActivity.startActivityWithButtonAnimation(
activity,
binding.searchLayout,
verticalOffset
)
} }
requestMore() requestMore()
} }
private var verticalOffset = 0
private var y = 0f private var y = 0f
fun requestMore() { fun requestMore() {
isLoading = true isLoading = true
...@@ -255,42 +279,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() { ...@@ -255,42 +279,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
binding.flSearchEngine.setOnClickListener { binding.flSearchEngine.setOnClickListener {
requireContext().showSearchEngineDialog { website -> requireContext().showSearchEngineDialog { website ->
searchEngine = website switchSearch(website)
searchEngineSp = website
when (website) {
GOOGLE -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_google)
searchAction = ::getGoogleSearch
}
BING -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_bing)
searchAction = ::getBingSearch
}
YAHOO -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_yahoo)
searchAction = ::getYahooSearch
}
DUCKDUCKGO -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_xuckd)
searchAction = ::getDuckDuckGoSearch
}
YANDEX -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_yandex)
searchAction = ::getYandexSearch
}
BAIDU -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_baidu)
searchAction = ::getBaiduSearch
}
}
} }
} }
...@@ -358,6 +347,44 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() { ...@@ -358,6 +347,44 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
} }
private fun switchSearch(website:String){
searchEngine = website
searchEngineSp = website
when (website) {
GOOGLE -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_google)
searchAction = ::getGoogleSearch
}
BING -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_bing)
searchAction = ::getBingSearch
}
YAHOO -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_yahoo)
searchAction = ::getYahooSearch
}
DUCKDUCKGO -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_xuckd)
searchAction = ::getDuckDuckGoSearch
}
YANDEX -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_yandex)
searchAction = ::getYandexSearch
}
BAIDU -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_baidu)
searchAction = ::getBaiduSearch
}
}
}
private fun copyUuidGid() { private fun copyUuidGid() {
val uuid = AppPreferences.getInstance().getString("uuid", "") val uuid = AppPreferences.getInstance().getString("uuid", "")
val gid = AppPreferences.getInstance().getString("gid", "") val gid = AppPreferences.getInstance().getString("gid", "")
...@@ -365,5 +392,12 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() { ...@@ -365,5 +392,12 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
Toast.makeText(requireContext(), "copy", Toast.LENGTH_SHORT).show() Toast.makeText(requireContext(), "copy", Toast.LENGTH_SHORT).show()
} }
override fun onDestroy() {
super.onDestroy()
if (mChangeSearchType != null) {
RxBus.get().unregister(Constants.CHANGE_SEARCH_TYPE, mChangeSearchType!!);
}
}
} }
\ No newline at end of file
...@@ -26,6 +26,8 @@ import com.base.browserwhite.databinding.DialogMediaMoreBinding ...@@ -26,6 +26,8 @@ import com.base.browserwhite.databinding.DialogMediaMoreBinding
import com.base.browserwhite.databinding.DialogMoreWebbrowserBinding import com.base.browserwhite.databinding.DialogMoreWebbrowserBinding
import com.base.browserwhite.databinding.DialogMyAccountBinding import com.base.browserwhite.databinding.DialogMyAccountBinding
import com.base.browserwhite.databinding.DialogSearchEngineBinding import com.base.browserwhite.databinding.DialogSearchEngineBinding
import com.base.browserwhite.help.Constants
import com.base.browserwhite.help.RxBus
import com.base.browserwhite.ui.activity.about.AboutActivity import com.base.browserwhite.ui.activity.about.AboutActivity
import com.base.browserwhite.ui.activity.feedback.FeedbackActivity import com.base.browserwhite.ui.activity.feedback.FeedbackActivity
import com.base.browserwhite.ui.views.DialogViews.showDefaultBrowserDialog import com.base.browserwhite.ui.views.DialogViews.showDefaultBrowserDialog
...@@ -154,6 +156,7 @@ object DialogViews { ...@@ -154,6 +156,7 @@ object DialogViews {
YANDEX -> binding.ivSearchEngine.setImageResource(R.mipmap.m_yandex) YANDEX -> binding.ivSearchEngine.setImageResource(R.mipmap.m_yandex)
BAIDU -> binding.ivSearchEngine.setImageResource(R.mipmap.m_baidu) BAIDU -> binding.ivSearchEngine.setImageResource(R.mipmap.m_baidu)
} }
RxBus.get().post(Constants.CHANGE_SEARCH_TYPE,searchEngineSp)
} }
} }
binding.clDefaultBrowser.isVisible = !isDefaultBrowser() binding.clDefaultBrowser.isVisible = !isDefaultBrowser()
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android" <alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="10" android:duration="10"
android:fromAlpha="0.0" android:fromAlpha="1.0"
android:toAlpha="1.0"></alpha> android:toAlpha="1.0"></alpha>
...@@ -2,4 +2,4 @@ ...@@ -2,4 +2,4 @@
<alpha xmlns:android="http://schemas.android.com/apk/res/android" <alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="10" android:duration="10"
android:fromAlpha="1.0" android:fromAlpha="1.0"
android:toAlpha="0.0"></alpha> android:toAlpha="1.0"></alpha>
\ No newline at end of file \ No newline at end of file
...@@ -8,9 +8,9 @@ ...@@ -8,9 +8,9 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/appbar_layout" android:id="@+id/appbar_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:visibility="gone"
android:layout_height="50dp" android:layout_height="50dp"
android:layout_marginHorizontal="15dp" android:layout_marginHorizontal="15dp"
android:layout_marginTop="48dp"
android:background="@drawable/bg_stroke_070709" android:background="@drawable/bg_stroke_070709"
android:gravity="center" android:gravity="center"
android:orientation="horizontal"> android:orientation="horizontal">
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
app:layout_scrollFlags="scroll|enterAlwaysCollapsed" app:layout_scrollFlags="scroll|enterAlwaysCollapsed"
tools:ignore="ContentDescription"> tools:ignore="ContentDescription">
...@@ -85,84 +84,90 @@ ...@@ -85,84 +84,90 @@
android:id="@+id/searchLayout" android:id="@+id/searchLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="50dp" android:layout_height="50dp"
android:layout_marginHorizontal="15dp" android:background="@color/white"
android:background="@drawable/bg_stroke_070709" android:layout_marginTop="16dp"
android:gravity="center" android:gravity="center"
android:orientation="horizontal"> android:orientation="horizontal">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/fl_search_engine" android:layout_width="match_parent"
android:layout_width="wrap_content" android:layout_height="match_parent"
android:layout_height="wrap_content" android:layout_marginHorizontal="15dp"
android:layout_margin="10dp" android:background="@drawable/bg_stroke_070709"
android:background="?android:attr/selectableItemBackground" tools:ignore="MissingConstraints">
android:padding="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription">
<ImageView <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/iv_search_engine" android:id="@+id/fl_search_engine"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@mipmap/h_s_google" android:layout_margin="10dp"
android:background="?android:attr/selectableItemBackground"
android:padding="5dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="-2dp"
android:layout_marginBottom="-2dp"
android:src="@mipmap/xuanze"
app:layout_constraintBottom_toBottomOf="@id/fl_search_engine"
app:layout_constraintEnd_toEndOf="@id/fl_search_engine"
tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView <ImageView
android:id="@+id/edit_web" android:id="@+id/iv_search_engine"
android:layout_width="0dp" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginHorizontal="5dp" android:src="@mipmap/h_s_google"
android:background="@null" app:layout_constraintBottom_toBottomOf="parent"
android:gravity="center_vertical" app:layout_constraintEnd_toEndOf="parent"
android:hint="Search or enter website address" app:layout_constraintStart_toStartOf="parent"
android:imeOptions="actionDone" app:layout_constraintTop_toTopOf="parent" />
android:inputType="textUri"
android:paddingHorizontal="5dp"
android:singleLine="true"
android:textColorHint="#858587"
android:textSize="14sp"
app:layout_constraintEnd_toStartOf="@id/fl_scan"
app:layout_constraintStart_toEndOf="@id/fl_search_engine"
tools:ignore="Autofill,HardcodedText,TextFields" />
<FrameLayout
android:id="@+id/fl_scan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="?android:attr/selectableItemBackground"
android:padding="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription">
<ImageView <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="-2dp"
android:layout_marginBottom="-2dp"
android:src="@mipmap/xuanze"
app:layout_constraintBottom_toBottomOf="@id/fl_search_engine"
app:layout_constraintEnd_toEndOf="@id/fl_search_engine"
tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/edit_web"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginHorizontal="5dp"
android:background="@null"
android:gravity="center_vertical"
android:hint="Search or enter website address"
android:imeOptions="actionDone"
android:inputType="textUri"
android:paddingHorizontal="5dp"
android:singleLine="true"
android:textColorHint="#858587"
android:textSize="14sp"
app:layout_constraintEnd_toStartOf="@id/fl_scan"
app:layout_constraintStart_toEndOf="@id/fl_search_engine"
tools:ignore="Autofill,HardcodedText,TextFields" />
<FrameLayout
android:id="@+id/fl_scan"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@mipmap/saoyisao" /> android:layout_margin="10dp"
android:background="?android:attr/selectableItemBackground"
android:padding="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription">
</FrameLayout> <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/saoyisao" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
......
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