我有一个小的演示聊天UI应用程序.此应用程序有一个底部导航栏.当键盘出现时我需要隐藏底部导航栏.
正如您在EditText元素中单击时所看到的那样,键盘会出现但底部导航栏仍然可见.我尝试过这种测量方法等方法,但UI元素却像这样闪烁.
当键盘可见时,是否有正确的方法隐藏底部导航栏?
编辑: 在下面的活动中,您可以看到我设置键盘监听器的位置,以便在确定键盘可见时调整UI元素的位置.
这是我的活动代码,使用上面链接中的setKeyboardListener方法并在onCreateView中设置它:
package uk.cal.codename.projectnedry.TeamChatFragment;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.Layout;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.roughike.bottombar.BottomBar;
import java.util.ArrayList;
import …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Android Studio的内置Espresso测试记录器创建一些Espresso UI测试.问题是:当我输入时,屏幕上显示的速度很慢.
任何文本输入/键盘都需要一段时间才能显示一个字母.我在一个超级简单的一个视图应用程序与一个更大的应用程序上测试了这一点,较大的应用程序延迟增加.我也在Genymotion和Android Studio模拟器上进行了测试,但延迟相同.
这是单页应用程序延迟的GIF:
知道如何解决这个问题吗?
testing user-interface android android-studio android-espresso
我在Android Studio中工作,正在使用WebView处理应用程序中的网页。我想跟踪此网页内的URL重定向,以便在正确的时间转到下一个活动。
可以通过重写WebViewClient类方法“ shouldOverrideUrlLoading”来执行此URL跟踪,以允许我转发到特定URL的新活动。但是,“ shouldOverrideUrlLoading”有两种实现:
shouldOverrideUrlLoading(WebView view, String url)
shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
Run Code Online (Sandbox Code Playgroud)
不推荐使用第一个(方法以String url结尾)。当我希望我的应用程序以API级别15和更高级别为目标时,上面显示的第二种方法只能在API级别21之外运行。
我知道这是否只是标准代码(不是方法重写),我可以从Android手机中提取API级别,然后根据检索到的级别执行任何一种方法。但是我不确定如何根据电话的API级别为用户指定这些重载方法中的哪个。
另外,我还发出红色波浪状警告我,调用需要API级别21,但是我相信它仍然可以编译,仅在API 21以下调用时才会崩溃?
下面是重写的重载方法的两个版本:
这是不推荐使用的方法:
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.equals("test")) {
return true;
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
这是该方法的新版本,其中“ WebResourceRequest”仅在API级别21+中受支持:
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if(request.getUrl().equals("test")) {
return true;
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
无论如何,是否可以指定在某些API级别使用哪种方法?因为我不确定如何仅使用不推荐使用的方法来执行此操作。
问题是当软键盘出现或消失时,recyclerview 几乎向下滚动了一整行。
这是一个视觉示例:
活动的布局使用ChatKit UI 库中的 MessageInput 和 MessageList 对象,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context="apps.cal.calchat.ChatActivity.ChatView">
<TextView
android:id="@+id/chatIsTypingTextView"
android:layout_width="match_parent"
android:layout_marginLeft="8dp"
android:layout_height="wrap_content"
android:layout_above="@+id/chatMessageInput"/>
<com.stfalcon.chatkit.messages.MessageInput
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:id="@+id/chatMessageInput"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<com.stfalcon.chatkit.messages.MessagesList
android:id="@+id/chatMessagesList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_above="@+id/chatIsTypingTextView"
/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
该活动还在清单中设置了 adjustPan:
<activity
android:name=".ChatActivity.ChatView"
android:windowSoftInputMode="adjustPan|stateHidden"/>
Run Code Online (Sandbox Code Playgroud)
Recyclerviews 线性布局管理器设置为垂直,具有反向布局和默认项目动画:
public <MESSAGE extends IMessage>
void setAdapter(MessagesListAdapter<MESSAGE> adapter, boolean reverseLayout) {
SimpleItemAnimator itemAnimator = new DefaultItemAnimator();
itemAnimator.setSupportsChangeAnimations(false);
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext(),
LinearLayoutManager.VERTICAL, reverseLayout);
setItemAnimator(itemAnimator);
setLayoutManager(layoutManager);
adapter.setLayoutManager(layoutManager);
adapter.setStyle(messagesListStyle);
addOnScrollListener(new RecyclerScrollMoreListener(layoutManager, adapter)); …Run Code Online (Sandbox Code Playgroud) 说我有一堂课:
public class Company extends RealmObject {
private String companyId;
private RealmList<CompanyMember> companyMembers;
}
Run Code Online (Sandbox Code Playgroud)
CompanyMember类如下所示:
public class CompanyMember extends RealmObject {
private String id;
private String name;
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用单个查询在领域中基于CompanyMember对象的“名称”字段搜索特定Company对象的“ companyMembers”列表?
例如,在公司123的CompanyMember列表中搜索名称包含“ abc”的所有CompanyMember,然后返回这些匹配的CompanyMembers的列表。
目前,我正在从Realm中检索整个公司,并反复在成员列表中搜索匹配项,但这似乎不是最好的方法。