我想在视图上移动光标时显示工具提示(QuickAction视图)。任何人都可以给我一个简单的例子吗?工具提示只包含文本值。
答案 0 :(得分:19)
Android仅支持Android 4.0上的ActionBar按钮的“工具提示”。但正如美洲虎已经提到的那样,Android中的工具提示并没有多大意义,因为没有悬停的概念。
如果您长按按钮,则会在Android 4.0中显示正常的标题文本(您在xml文件中或通过代码设置的文本)。但是如果屏幕上有足够的空间,它将一直显示在ActionBar中,一直显示在图标旁边。
如果您想将其用于自定义视图,则需要在视图中添加LongClickListener
并在长按时显示Toast
来自行实现:
view.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View v) {
Toast.makeText(v.getContext(), "My tool-tip text", Toast.LENGTH_SHORT).show();
return true;
}
}
当然你应该为字符串使用资源,而不是硬编码字符串。
答案 1 :(得分:18)
可能使用myView.setTooltipText(CharSequence)
(来自API级别26)或TooltipCompat
(API级别26之前)是一个额外的选项:
TooltipCompat.setTooltipText(myView, context.getString(R.string.myString));
文档说:
Helper类用于在API级别26之前模拟{@link View#setTooltipText(CharSequence)}的行为。
答案 2 :(得分:8)
支持库的修订版26.0.1
为视图和菜单项添加了对tooltips(带有描述性文字的小弹出窗口)的支持。
使用setTooltipText设置工具提示文本,该文本将显示在视图旁边的小弹出窗口中。
将显示工具提示:
将Support Library添加到您的应用程序项目中:
例如:
allprojects {
repositories {
jcenter()
maven {
url "https://maven.google.com"
}
}
}
将支持库添加到依赖项部分。
dependencies {
compile "com.android.support:appcompat-v7:26.0.1"
}
答案 3 :(得分:7)
从Android API 14+开始,有一个event for hovering。你可以,
view.setOnHoverListener(...)
并倾听MotionEvent
和ACTION_HOVER_EXIT
等onLongClick
,而不是{{1}}。
答案 4 :(得分:4)
基于GregoryK's answer,我创建了一个新的ImageButton类 - 请参阅下面的代码。要使用它,您需要做的就是将布局中的ImageButton
替换为com.yourpackage.ImageButtonWithToolTip
,并为其指定android:contentDescription
属性(因为这是将在工具提示中显示的文本) )。
package com.yourpackage;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Rect;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.ImageButton;
import android.widget.Toast;
public class ImageButtonWithToolTip extends ImageButton {
private static final int ESTIMATED_TOAST_HEIGHT_DIPS = 48;
public ImageButtonWithToolTip(Context context) {
super(context);
init();
}
public ImageButtonWithToolTip(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public ImageButtonWithToolTip(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
@TargetApi(21)
public ImageButtonWithToolTip(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
private void init() {
setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
/**
* You should set the android:contentDescription attribute in this view's XML layout file.
*/
String contentDescription = getContentDescription().toString();
if (TextUtils.isEmpty(contentDescription)) {
/**
* There's no content description, so do nothing.
*/
return false; // Not consumed
}
else {
final int[] screenPos = new int[2]; // origin is device display
final Rect displayFrame = new Rect(); // includes decorations (e.g. status bar)
view.getLocationOnScreen(screenPos);
view.getWindowVisibleDisplayFrame(displayFrame);
final Context context = view.getContext();
final int viewWidth = view.getWidth();
final int viewHeight = view.getHeight();
final int viewCenterX = screenPos[0] + viewWidth / 2;
final int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
final int estimatedToastHeight = (int) (ESTIMATED_TOAST_HEIGHT_DIPS
* context.getResources().getDisplayMetrics().density);
Toast toolTipToast = Toast.makeText(context, contentDescription, Toast.LENGTH_SHORT);
boolean showBelow = screenPos[1] < estimatedToastHeight;
if (showBelow) {
// Show below
// Offsets are after decorations (e.g. status bar) are factored in
toolTipToast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL,
viewCenterX - screenWidth / 2,
screenPos[1] - displayFrame.top + viewHeight);
}
else {
// Show above
// Offsets are after decorations (e.g. status bar) are factored in
// NOTE: We can't use Gravity.BOTTOM because when the keyboard is up
// its height isn't factored in.
toolTipToast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL,
viewCenterX - screenWidth / 2,
screenPos[1] - displayFrame.top - estimatedToastHeight);
}
toolTipToast.show();
return true; // Consumed
}
}
});
}
}
您可以使用相同的方法来扩展其他视图 - 例如Button
。
答案 5 :(得分:3)
Android没有工具提示。这是一个基于触摸的UI。目前的触摸传感器通常无法以工具提示有用的方式检测悬停。
在触摸屏中没有“悬停”的概念,但您可以为视图设置LongClickListener,并在长按后显示Toast。
答案 6 :(得分:3)
如果您需要显示任何视图的工具提示,可以使用Roman Nurik的CheatSheet
util类。 (使用Toast
和可选content description
来显示工具提示。)
是
Android帮助程序类,用于显示仅限图标的备忘单(工具提示) 长按UI元素。这已经是默认的平台行为 仅用于图标的操作栏项和选项卡。这个类提供了这个 任何其他此类UI元素的行为
答案 7 :(得分:1)
package com.nbfc.tekis.tooltipexample;
import android.support.v7.app.AppCompatActivity; import
android.os.Bundle; import android.view.View; import
android.widget.Button; import android.widget.GridView;
import it.sephiroth.android.library.tooltip.Tooltip;
public class MainActivity extends AppCompatActivity {
/*Button button1,button2,button3,button4;*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void bottomTooltip(View view) {
Button button1=(Button)findViewById(R.id.button1);
Tooltip.make(this,new Tooltip.Builder()
.anchor(button1, Tooltip.Gravity.BOTTOM)
.closePolicy(new Tooltip.ClosePolicy()
.insidePolicy(true,false)
.outsidePolicy(true,false),4000)
.activateDelay(900)
.showDelay(400)
.text("Android tooltip bottom")
.maxWidth(600)
.withArrow(true)
.withOverlay(true)
.build())
.show();
}
public void topTooltip(View view) {
Button button3=(Button)findViewById(R.id.button3);
Tooltip.make(this,new Tooltip.Builder()
.anchor(button3, Tooltip.Gravity.TOP)
.closePolicy(new Tooltip.ClosePolicy()
.insidePolicy(true,false)
.outsidePolicy(true,false),4000)
.activateDelay(900)
.showDelay(400)
.text("Android tooltip top")
.maxWidth(600)
.withOverlay(true)
.withArrow(true)
.build())
.show();
}
public void rightTooltip(View view) {
Button button2=(Button)findViewById(R.id.button2);
Tooltip.make(this,new Tooltip.Builder()
.anchor(button2, Tooltip.Gravity.RIGHT)
.closePolicy(new Tooltip.ClosePolicy()
.insidePolicy(true,false)
.outsidePolicy(true,false),4000)
.activateDelay(900)
.showDelay(400)
.text("Android tooltip right")
.maxWidth(600)
.withArrow(true)
.withOverlay(true)
.build())
.show();
}
public void leftTooltip(View view) {
Button button4=(Button)findViewById(R.id.button4);
Tooltip.make(this,new Tooltip.Builder()
.anchor(button4, Tooltip.Gravity.LEFT)
.closePolicy(new Tooltip.ClosePolicy()
.insidePolicy(true,false)
.outsidePolicy(true,false),4000)
.text("Android tooltip left")
.maxWidth(600)
.withArrow(true)
.withOverlay(true)
.build())
.show();
}
}
答案 8 :(得分:0)
将此添加到您的按钮
android:tooltipText="Tooltip text goes here"
答案 9 :(得分:0)
根据禁令的答案,我创建了此方法。
它不假设烤面包的大小。只需根据视图相对于窗口的位置(即窗口中心的左/右/上方/下方)放置工具提示重力即可。烤面包总是从视图的中心开始,并将分别向右/左/下/上延伸。
private static void setToastGravity(View view, Toast toast) {
final Rect viewRect = new Rect(); // view rect
final Rect windowRect = new Rect(); // window rect
view.getGlobalVisibleRect(viewRect);
view.getWindowVisibleDisplayFrame(windowRect);
int offsetX;
int offsetY;
int gravityX;
int gravityY;
if (viewRect.centerY() > windowRect.centerY()) {
// above
offsetY = windowRect.bottom - viewRect.centerY();
gravityY = Gravity.BOTTOM;
} else {
// tooltip below the view
offsetY = viewRect.centerY() - windowRect.top;
gravityY = Gravity.TOP;
}
if (viewRect.centerX() > windowRect.centerX()) {
// tooltip right of the view
offsetX = windowRect.right - viewRect.centerX();
gravityX = Gravity.END;
} else {
// tooltip left of the view
offsetX = viewRect.centerX() - windowRect.left;
gravityX = Gravity.START;
}
toast.setGravity(gravityX | gravityY, offsetX, offsetY);
}
答案 10 :(得分:0)
我很乐意为您提供帮助
先生,请尝试-> android-simple-tooltip
我希望对您有用
示例: 发布 将其添加到存储库末尾的root build.gradle中:
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
添加依赖项
dependencies {
implementation 'com.github.douglasjunior:android-simple-tooltip:0.2.3'
}
将此代码添加到MainActivity类中,并为您的视图创建一个对象,该对象将与工具提示绑定
View yourView = findViewById(R.id.your_view);
new SimpleTooltip.Builder(this)
.anchorView(yourView)
.text("Texto do Tooltip")
.gravity(Gravity.END)
.animated(true)
.transparentOverlay(false)
.build()
.show();
答案 11 :(得分:0)
https://github.com/skydoves/Balloon
这个库提供了一个轻量级的弹出式工具提示,完全可定制的箭头和动画。 100% Kotlin 包含所有必要的文档。它也受到积极管理。
这是他们页面上的一些 gif;
另一个,