unity 下拉列表根据内容长度进行 下拉列表长度的自适应
unity 下拉列表根据内容长度进行 下拉列表长度的自适应
输入内容之后,如果内容的最大长度大于MaxDropdownTextCount
则使用最大长度MaxDropdownWidth
, 并且将多的字符串设置为....
如果小于最小长度MinDropdownTextCount
则下拉列表长度是MinDropdownWidth
。 如果在最大和最小中间 使用WidthMultiplier
计算长度,都是根据下拉列表中最长的字符串进行计算的!不是根据新增加的计算。
UI布局
using System.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class NewBehaviourScript : MonoBehaviour
{
public TMP_Dropdown dropdown;
public Button addButton;
public TMP_InputField inputField;
public Button clearButton;
// 下拉框文本长度限制
private const int MaxDropdownTextCount = 30;
private const int MinDropdownTextCount = 10;
// 下拉框宽度计算常量
private const float WidthMultiplier = 5f;
private const int MaxDropdownWidth = 300;
private const int MinDropdownWidth = 150;
private void Start()
{
// 添加监听器到添加按钮,用于添加新的下拉框选项
addButton.onClick.AddListener(() => AddDropdownOption(inputField.text));
// 添加监听器到清除按钮,用于清除所有下拉框选项
clearButton.onClick.AddListener(ClearDropdownOptions);
}
/// <summary>
/// 添加一个新的选项到下拉框。
/// </summary>
/// <param name="newOptionText">要添加的新选项的文本。</param>
private void AddDropdownOption(string newOptionText)
{
if (!string.IsNullOrEmpty(newOptionText))
{
// 如果文本超过最大允许长度,则截断文本
var truncatedText = TruncateText(newOptionText, MaxDropdownTextCount);
dropdown.options.Add(new TMP_Dropdown.OptionData(truncatedText));
// 更新下拉框大小以适应新选项
UpdateDropdownSize();
}
}
/// <summary>
/// 清除下拉框中的所有选项。
/// </summary>
private void ClearDropdownOptions()
{
dropdown.ClearOptions();
// 清除选项后更新下拉框大小
UpdateDropdownSize();
}
/// <summary>
/// 根据最长的选项文本更新下拉框的大小。
/// </summary>
private void UpdateDropdownSize()
{
// 计算下拉框的宽度并将其限制在最小和最大宽度之间
int width = Mathf.Clamp(CalculateDropdownWidth(), MinDropdownWidth, MaxDropdownWidth);
dropdown.GetComponent<RectTransform>().sizeDelta = new Vector2(width, 30);
}
/// <summary>
/// 根据最长的选项文本计算下拉框的宽度。
/// </summary>
/// <returns>计算出的下拉框宽度。</returns>
private int CalculateDropdownWidth()
{
string longestOption = GetLongestOptionText();
int length = longestOption.Length;
// 根据最长的选项文本长度计算下拉框的宽度
return MinDropdownWidth + (int)(Mathf.Max(0, length - MinDropdownTextCount) * WidthMultiplier);
}
/// <summary>
/// 获取下拉框中最长的选项文本。
/// </summary>
/// <returns>最长的选项文本。</returns>
private string GetLongestOptionText()
{
// 使用LINQ查找最长的选项文本
return dropdown.options.Select(option => option.text).OrderByDescending(text => text.Length).FirstOrDefault() ?? "";
}
/// <summary>
/// 如果给定的文本超过最大允许长度,则截断文本。
/// </summary>
/// <param name="text">要截断的文本。</param>
/// <param name="maxLength">文本的最大允许长度。</param>
/// <returns>截断后的文本。</returns>
private string TruncateText(string text, int maxLength)
{
// 如果文本超过最大长度,则截断并在末尾添加"..."
return text.Length > maxLength ? text.Substring(0, maxLength - 3) + "..." : text;
}
}
原文地址:https://blog.csdn.net/GoodCooking/article/details/143734207
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!