天道酬勤,学无止境

TextView getting cut in some resolutions

问题

我有一个RecyclerView ,它由具有TextViewImageViewCardView以及其他一些布局组成。
问题是,在某些屏幕分辨率下, TextView被截断或推到下一行,这是我不想要的。
在其他分辨率下, TextView有足够的空间。

小分辨率:

高分辨率:

如何组织布局以便为TextView提供足够的空间,并且ImageView将相应地调整大小?

这是我的RecyclerView项目的 xml:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cardview="http://schemas.android.com/apk/res-auto"
android:id="@+id/zmanCard"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
cardview:cardUseCompatPadding="false"
cardview:cardPreventCornerOverlap="false"
cardview:cardCornerRadius="4dp"
cardview:cardElevation="2dp">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?attr/colorPrimary"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:layout_gravity="top"
        android:gravity="center"
        android:orientation="vertical"
        android:background="?attr/colorPrimaryDark">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/zmanCardTitle"
            android:textColor="#ffffff"
            android:gravity="center"
            android:textSize="13sp" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <ImageView
            android:layout_width="24dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="2dp"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="4dp"
            android:alpha="0.8"
            android:id="@+id/zmanCardImage" />
        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="7dp"
            android:layout_marginLeft="0dp"
            android:layout_marginRight="4dp">
            <TextView
                android:text="5:40"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="2dp"
                android:id="@+id/zmanCardTime"
                android:textColor="#ffffff"
                android:textSize="18sp" />
            <ProgressBar
                android:id="@+id/zmanProgressBar"
                android:layout_width="24dp"
                android:layout_height="24dp"
                android:layout_gravity="top|left"
                style="@style/Base.Widget.AppCompat.ProgressBar" />
        </FrameLayout>
    </LinearLayout>
</LinearLayout>

回答1

试试这个。 工作 100%。

AutoResizeTextView或 sdp 单元可以帮助您。

SDP - 可扩展的尺寸单位

一个 android SDK,它提供了一个新的尺寸单位 - sdp ( scalable dp )。 此尺寸单位随屏幕尺寸缩放。 它可以帮助Android开发者支持多屏。

对于文本视图,请参考 ssp,它基于文本的 sp 大小单位。

https://github.com/intuit/sdp

自动缩放 TextView 文本以适应边界

如果您想为不同的屏幕支持不同的布局设计:

res/layout/my_layout.xml             // layout for normal screen size ("default")
res/layout-small/my_layout.xml       // layout for small screen size
res/layout-large/my_layout.xml       // layout for large screen size
res/layout-xlarge/my_layout.xml      // layout for extra large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

更多信息请看这里

回答2

自动调整文本大小以完全适应其边界的 TextView。

用法:

dependencies {
    compile 'me.grantland:autofittextview:0.2.+'
}

在代码中启用任何扩展 TextView 的视图:

AutofitHelper.create(textView);

在 XML 中启用任何扩展 TextView 的视图:

<me.grantland.widget.AutofitLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:singleLine="true"
        />
</me.grantland.widget.AutofitLayout>

在代码或 XML 中使用内置的 Widget:

<RootElement
    xmlns:autofit="http://schemas.android.com/apk/res-auto"
    ...
<me.grantland.widget.AutofitTextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:singleLine="true"
    android:maxLines="2"
    android:textSize="40sp"
    autofit:minTextSize="16sp"
    />

参考链接:https://github.com/grantland/android-autofittextview

回答3

我可以针对您的文本大小建议两步解决方案,以便使用wrap_content属性使其适合文本,并且我建议使用限定符来提供几种替代布局以针对不同的屏幕配置。 为此,您可以使用配置限定符,它允许运行时根据当前设备的配置(例如针对不同屏幕尺寸的不同布局设计)自动选择适当的资源。 支持不同的屏幕尺寸

从这部分到最后,我从@Herry 的答案中复制了我的答案:我认为你需要检查这个 Google IO Pdf for Design。 在该 pdf 中转到第 77 页,您将在其中找到如何建议将dimens.xml用于不同的 android 设备,例如参见以下结构:

res/values/dimens.xml

res/values-small/dimens.xml

res/values-normal/dimens.xml

res/values-large/dimens.xml

res/values-xlarge/dimens.xml

例如,您在值中使用了以下 dimens.xml。

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">18sp</dimen>
</resources>

在其他值文件夹中,您需要更改文本大小的值。

例如:

<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
    <dimen name="font_size_small">10sp</dimen>
    <dimen name="font_size_medium">20sp</dimen>
    <dimen name="font_size_large">30sp</dimen>
</resources>
回答4

如果你想要可缩放的屏幕,你不应该尽可能使用固定的高度或宽度。 在您的情况下,您应该将组件与 layout_weight 按比例放置。

更多细节;

android:layout_weight 是什么意思?

回答5
回答6
  <TextView
            android:text="5:40"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="2dp"
            android:id="@+id/zmanCardTime"
            android:textColor="#ffffff"
            android:padding:"3dp"
            android:textSize="18sp" />
回答7

我认为您不应该修复GridLayoutspanCount 。 最好是high resolutions显示 4 个项目, small resolutions显示 3 个项目, landscape display 5 个项目,...

为此,您应该为您将支持的所有值文件夹创建一个constants ,例如

res/values-small/dimens.xml
      constants.xml
res/values-large/dimens.xml
      constants.xml

对于每个constants.xml ,它看起来像

<resources>
<integer name="span_count">3</integer>
</resources>

然后当你创建GridLayoutManager

GridLayoutManager lm = new GridLayoutManager(Context context, getContext().getResources().getInteger(R.integer.span_count));

这样做之后,您的问题就不会发生

回答8
回答9

使用AutoScaleTextView

AutoScaleTextView采用android:textSize值并将其用作首选文本大小。 您还可以设置最小文本大小。 最小文本大小的默认值为10dpAutoScaleTextView现在尝试采用适合视图宽度的首选大小和最小大小之间的最大值(关于填充)。

请在下面的链接中找到完整的 AutoScaleTextView 类及其实现

http://ankri.de/autoscale-textview/

回答10

在这里,您再次使用关键字第二次

解析度

您现在有哪些选择?

  • 支持多屏

    1 多种布局 2.Multiple 维度

  • 关于这个特定问题的著名答案(Auto Scale Text-view Text to Fit in Bounds)

  • Weight_sum 属性的使用
  • GitHub 库,例如AutoFitTextView , SDP

刚刚总结了这些答案(多合一)! 还有其他选择吗?

正如我所看到的,您的问题与两个手牵手的案例有关。

  1. 当然你的文本不会调整大小 2.你的布局太灵活了。

有时会看到TextView本身出现故障。您可以尝试避免这种情况的任何其他选项,而不是您拥有的解决方案?

百分比相对布局

这有什么额外的好处吗? 是的,这支持基于百分比的尺寸和边距,您已经设置了固定边距,这将使用百分比为您提供它们。它甚至有一个很酷的属性,称为layout_aspectRatio 。 这是一个小教程的链接。

根据视图的比率/绝对位置给出大小

PercentRelativeLayout之前,我主要使用这个。首先,您需要拥有视图的模型图像/草图。 我的模型高度为 1920 像素,宽度为 1080 像素(通常是 HDTV 分辨率,16:9 宽高比)

在该图像中,我们知道视图的位置。

然后对于任何视图/任何其他屏幕,我可以使用相同的比例使用LayoutParams来定位它们。 现在根据您的规则查看住宿。

这是一个例子:

DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
height = displaymetrics.heightPixels;
width = displaymetrics.widthPixels;

LinearLayout.LayoutParams topLenP= new LinearLayout.LayoutParams(300 * width / 1080, 400 * width / 1920); 
//topLenP.topMargin = x* height / 1920;
//topLenP.leftMargin = y* width / 1080;
myView.setLayoutParams(topLenP);

实际上我在这里做了什么,正如我在模型视图中所说,这个视图占用了 300 宽,400 高,我正在为我的黑醋栗屏幕调整相同的比例。(使用黑醋栗屏幕尺寸)。

回到自动缩放,因为现在我们有一个基于相同比率的视图,这是另一个很好的答案。

适用于 Android 的自动调整 TextView

安卓:文本外观

最后,在 android \platforms\android-X\data\res\values\themes.xml中给出了基于 small、large 和 medium 的固定大小。

在不指定您确切需要的情况下,您也可以将其用作

<TextView
   android:textAppearance="?android:attr/textAppearance"
   ....
   /> 

希望这可以帮助!

回答11

解决方案 1

https://developer.android.com/guide/practices/screens_support.html

// The TEXT SIZE in dp
private static final float TEXT_SIZE_DP = 16.0f;

// Get the screen's density scale
final float scale = getResources().getDisplayMetrics().density;
// Convert the dps to pixels, based on density scale
int textSize = (int) (TEXT_SIZE_DP * scale + 0.5f);

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,textSize);

解决方案2:

float dpi = getResources().getDisplayMetrics().widthPixels;
dpi = dpi / 320;

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,TEXT_SIZE_DP*dpi);

它的工作原理参考下面的链接

http://canvasonandroid.blogspot.in/2016/04/how-to-scale-font-size-for-different.html

注意:它仅适用于设备,不适用于平板电脑。 我们需要为平板电脑编写不同的逻辑。 为此,您需要在 dimen.xml 中设置字体大小

回答12

我在 android 中的经验我总是使用 dp 而不是 sp,所以你修复了所有 textviews 的 dp 值,并且适合任何屏幕。

让我知道是否有任何问题。

最佳注册

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • TextView getting cut in some resolutions
    I have a RecyclerView which consists of CardViews that have a TextView and an ImageView, among some other layouts. The problem is, in some screen resolutions the TextView gets cut off or shoved to the next line, which I don't want. In other resolutions, the TextView has plenty of room. Small Resolutions: High Resolutions: How do I organize the layout so that there is enough room for the TextView, and the ImageView will be sized accordingly? This is my xml for the RecyclerView items: <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cardview=
  • 如何在 TextView 控件中剪切、复制、粘贴和全选?(How do I cut, copy, paste and select all in a TextView control?)
    问题 我正在尝试使用 TextView Gtk 控件剪切、复制、粘贴和选择所有内容。 为什么是 TextView 控件? 因为我似乎无法让该死的 TextEditor 控件进入多行! 无论如何......我如何: 从 TextView 控件中剪切文本? 从 TextView 控件复制文本? 将文本粘贴到 TextView 控件中? 选择TextView 控件中的所有文本? 这是我尝试过的:1 小时的谷歌搜索。 还有这个: TextView tv = ...; TextIter start, end; if (tv.Buffer.GetSelectionBounds(start, end)) { String selected = tv.Buffer.GetText(start, end); Clipboard clipboard = tv.GetClipboard(Gdk.Selection.Clipboard); clipboard.Text = selected; } 来自:https://stackoverflow.com/questions/26308501/gtk-textview-copy-and-paste - 但这显然不起作用(因此我的问题)。 我还发现了这个:http://docs.go-mono.com/?link=T%3aGtk.TextView Mono
  • textview在android中切断一个字母(textview cutting off a letter in android)
    问题
  • UITextView 如何截断文字(UITextView how to cut off text)
    问题 我有一个 UITextView 显示从 Facebook Connect 加载的 Facebook 状态。 我正在尝试使 UITextView 只是创建文本的预览。 当 UILabel 的文本过多时,我希望它看起来像这样。 有点像“文本太多......”,但 UITextViews 不会这样做。 有人知道如何让它工作吗? 回答1 编写一个单独的方法来计算字符串中有多少个字母,如果超过某个预设值,则将其剪切并在末尾附加三个点。 此外,如果您不需要编辑内部信息,请考虑使用 UILabels 而不是 UITextViews,因为 UITextViews 需要更长的时间来分配和初始化,并且通常比 UILabels 慢。 回答2 +(NSString *)getTruncatedTextForString:(NSString *)inputString withFont:(UIFont *)font withLength:(int)textViewlength { CGSize dotSize=[@"..." sizeWithFont:font]; float dotWidth=dotSize.width; NSString *outputString=@""; int reqLength=textViewlength-dotWidth; for(int i=0;i
  • Android textview 文本被自定义字体从侧面截断(Android textview text get cut off on the sides with custom font)
    问题 这是在预览和设备上发生的情况: TextView 没什么特别的,它只是加载自定义字体: public class TestTextView extends AppCompatTextView { public TestTextView(Context context) { super(context); init(context); } public TestTextView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public TestTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } void init(Context context) { Typeface t = Typeface.createFromAsset(context.getAssets(), "fonts/daisy.ttf"); setTypeface(t); } } 布局也非常基本,但以防万一: <LinearLayout xmlns:android="http://schemas.android.com/apk
  • Android textview text get cut off on the sides with custom font
    This is what happens in the preview and on device: TextView is nothing special, it just loads the custom font: public class TestTextView extends AppCompatTextView { public TestTextView(Context context) { super(context); init(context); } public TestTextView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public TestTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } void init(Context context) { Typeface t = Typeface.createFromAsset(context.getAssets(), "fonts/daisy.ttf"); setTypeface(t); } } Layout is
  • Convert magnetic field X, Y, Z values from device into global reference frame
    When you use TYPE_MAGNETOMETER sensor, you get X, Y, Z values of magnetic field strength in relation to the device orientation. What I want to get is to convert these values into global reference frame, clarifying: user takes the device, measure these values, than rotate the device for some degrees around any axis and gets ~the same values. Please, find similar questions below: Getting magnetic field values in global coordinates How can I get the magnetic field vector, independent of the device rotation? In this answer sample solution is described (it is for linear acceleration, but I think it
  • Android:截取了textview的最后一行(Android: Last line of textview cut off)
    问题 我有一个水平的LinearLayout其中包含一个TextView紧接着是一个Spinner 。 在RelativeLayout包含的固定垂直LinearLayout中,此LinearLayout被动态多次LinearLayout 。 问题在于,由于我从Theme.light切换到Theme.holo.light ,因此TextView的最后一行被切成两半。 当动态文本很长并且跨越多行时,会发生这种情况。 我已经能够通过在包含TextView和Spinner的水平LinearLayout中添加底部填充来解决此问题。 这看起来不像是解决方法,但更多的是破解。 有人可以给我一些有关如何正确解决此问题的建议吗? 我还阅读了其他一些问题,但似乎没有帮助。 水平线性布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/textView1"
  • How to make the TextView drag in LinearLayout smooth, in android?
    I have a situation which I am not able to fix, hopefully I will get some advises from you. The situation is simple: I have a LinearLayout in which I have a TextView with multiple lines of text. The user is able to drag the TextView around until he finds a position he likes. What is really important is that the TextView can be partially out of the LinearLayout (it will appear cut). Here are some code samples: <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top|center_horizontal" android:clipChildren="false" android:gravity="center
  • Android TextView cuts off after one paragraph
    I am creating an app for my school newspaper and am running into a problem when trying to display the full article. Currently I have a list of articles appear that are pulled from an RSS feed, and when one is clicked on it brings up the content of the article. However only the first paragraph displays in the TextView, no matter how long it is. This leads me too believe that it has something to do with the <p></p> HTML tags. I am not that familiar with RSS feeds or parsing XML(this being my first time trying it)and have looked around for ways to do what I'm trying to accomplish. I am basing
  • 在android中,如何使LinearLayout中的TextView拖动平滑?(How to make the TextView drag in LinearLayout smooth, in android?)
    问题 我有一个我无法解决的情况,希望我能从你那里得到一些建议。 情况很简单:我有一个 LinearLayout,其中有一个包含多行文本的 TextView。 用户可以拖动 TextView 直到找到他喜欢的位置。 真正重要的是 TextView 可以部分脱离 LinearLayout(它会显得切开)。 下面是一些代码示例: <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top|center_horizontal" android:clipChildren="false" android:gravity="center_horizontal|center_vertical" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:textColor="@color/text_color" android:textSize="16sp" /> </LinearLayout>
  • 旋转 TextView 而不截断文本(Rotate TextView without cut off text)
    问题 我正在尝试旋转 TextView,但我的文本被边界截断。 但是文字是旋转的。 我没有将它用于动画或某种形式。 它只是静态的,设计方面的:) 我有一个 RotatedTextView 我这样做: public class RotatedTextView extends TextView @Override public void onDraw(Canvas canvas) { canvas.save(); float py = this.getHeight()/2.0f; float px = this.getWidth()/2.0f; px = py = 0; canvas.rotate(this.degrees, px, py); super.onDraw(canvas); canvas.restore(); } 这是它现在的样子: 原始来源 谁能帮我解决这个问题? 谢谢 ! 回答1 尝试向文本视图添加填充。 这应该使画布保持在边界内。 或者您可能需要相应地放置视图的高度。
  • 百度、高德、腾讯、天地图、谷歌、必应等自定义地图/图片叠加层/瓦片图/金字塔图切片生成工具 MapTiler
    # MapTiler 地图覆盖图瓦片地图(金字塔图)切图工具,支持百度、腾讯、高德、天地图、谷歌、必应地图等,是市面上最容易使用的同类软件。. https://blog.csdn.net/surfsky/article/details/106951716 下载 v.2.8.1 https://download.csdn.net/download/surfsky/13201529 最新版本2.9.0 # 功能 自定义地图多分辨率(金字塔)切图,根据地图级别切成256*256的小图片。生成对应的地图网页。快速辅助校准地图位置。本软件提供地图位置设置窗口及预览窗口,方便用户快速精确的定位地图。支持图片格式:jpg, png, tiff, gif, svg 等。支持超大图片(分辨率大于20480*20480)。支持切图范围 1-22。一般web用10-18级,mobile用10-19级,20级仅有少数地图服务商支持。google支持22级。支持升级。支持最新版本检测及下载。支持自定义切片命名。默认为"{x}_{y}",可自定义。支持的地图: - Baidu map - Tencent map - Gaode map - Tiandi map - Google map - Bing map # 使用步骤 (1)设置覆盖图及地图配置参数 (2)设置覆盖图区域 (3)预览效果 (4
  • Printing an Image using a Bluetooth Thermal Printer From an Android App?
    I have been trying to get a print of an Image but I have not been successful so far.The printer is a locally manufactured 2" thermal printer having a printing resolution of 8dots/mm, 384dots/line, 203 dpi. The printer is based of a board having the "NXP 2388 ARM v7 Microproc." having a Memory FLASH size of 512 KB, RAM: 128 KB & a Receive Buffer Size of 16KB. I followed this question till now. Problem: The image I tried printing is of 576x95 res. The image got printed(with some error LED lighting up and debug buzzer noise :D) but the orientation of the image was vertical instead of getting
  • Android TextView 在一段后截断(Android TextView cuts off after one paragraph)
    问题
  • 阿拉伯字体在 Android 4.0 中被删减(Arabic font gets cut in Android 4.0)
    问题 它看起来像 Android 4.0 的有线行为。 在我的项目中有一些阿拉伯语文本。 当我在使用 Android 4.0 或任何版本的模拟器中运行该项目时,它看起来不错。 但是当我在真正的 Android 4.0 设备上运行它时,它看起来像是从右侧剪切文本。 请参阅下面的屏幕。 屏幕 1:在模拟器中 屏幕 2:在真正的 Android 4.0 设备中 我不明白为什么会这样。 我怎样才能解决这个问题? 代码或行项目: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:orientation="horizontal" android:layout_height="wrap_content" android:background="#ffffff"> <LinearLayout android:orientation="horizontal" android:layout_margin="20dp" android:layout_width="fill_parent" android:layout_height="wrap
  • Rotate TextView without cut off text
    i'm trying to rotate a TextView, but my text gets cut off by the bounds. But the text is rotated. I'm not using this for an animation or some sort. It's just static, design-wise :) I have a RotatedTextView where i do this: public class RotatedTextView extends TextView @Override public void onDraw(Canvas canvas) { canvas.save(); float py = this.getHeight()/2.0f; float px = this.getWidth()/2.0f; px = py = 0; canvas.rotate(this.degrees, px, py); super.onDraw(canvas); canvas.restore(); } Here's how it is looking now: Orginial source Can anyone help me solve this issue ? Thanks !
  • 当文本足够长时,TextView 会切断文本(TextView cuts off text when it is long enough)
    问题 我对 TextView 有一个奇怪的问题,它在最后切断了部分文本。 我的布局看起来像 <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="top|center_horizontal" android:gravity="top|center_horizontal" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="top|center_horizontal" android:gravity="top|center_horizontal" android:orientation="horizontal" android:layout_weight="1" android:layout_marginBottom="5dp"> <Button android:id="@+id/btnPreviousQuestion" android:layout_width="wrap_content"
  • 如何在屏幕的某些位置对齐视图,在多个屏幕分辨率下保持一致?(How does one align views at certain positions of the screen, staying consistent across multiple screen resolutions?)
    问题 我在对齐按钮时遇到了一些问题。 我想将它们放在(大约)屏幕的 1/3 和 2/3(我在下面提供了一个屏幕截图以使事情更清楚)我的代码如下: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/mainbg"> <Button android:text="@string/topbutton" android:background="@drawable/silvertablesbuttonbgkort" android:id="@+id/topbutton" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center|center_vertical"> </Button> <Button
  • 以静态方法在 UIView 上以清晰的颜色绘制(切孔)(drawing with clear color on UIView (cutting a hole) in static method)
    问题 我有一个 iPhone 应用程序,我需要实现以下方法: +(UITextView *)textView:(UITextView *) withCuttedRect:(CGRect)r 此方法必须切(填充用[UIColor clearColor]的RECT r从UITextView和返回UITextView对象。 用户将从切割的孔中看到UITextView后面的视图。 如何做呢? 回答1 当你有类似的东西时: +(UITextView *)textView:(UITextView *)textView withCuttedRect:(CGRect)r { } 你实际上可以简单地从核心动画访问 textview 的层 textView.layer 然后,您可以设置用于剪辑的蒙版。 这些蒙版的工作方式如下:你通常画一个黑色的形状,保持不变,其余的将被剪裁(好吧,你实际上也可以在 alpha 通道上做一些事情,但大致就是这样)。 所以你需要一个黑色矩形作为遮罩,矩形内有一个矩形是免费的。 为此,您大约可以做到 CAShapeLayer *mask = [[CAShapeLayer alloc] init]; mask.frame = self.textView.layer.bounds; CGRect biggerRect = CGRectMake(mask.frame.origin