下面列出了android.view.View#setContentDescription ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void onSelectionStateChange(List<HistoryItem> selectedItems) {
boolean wasSelectionEnabled = mIsSelectionEnabled;
super.onSelectionStateChange(selectedItems);
if (mIsSelectionEnabled) {
int numSelected = mSelectionDelegate.getSelectedItems().size();
// If the delete menu item is shown in the overflow menu instead of as an action, there
// may not be a view associated with it.
View deleteButton = findViewById(R.id.selection_mode_delete_menu_id);
if (deleteButton != null) {
deleteButton.setContentDescription(getResources().getQuantityString(
R.plurals.accessibility_remove_selected_items,
numSelected, numSelected));
}
// The copy link option should only be visible when one item is selected.
getItemById(R.id.selection_mode_copy_link).setVisible(numSelected == 1);
if (!wasSelectionEnabled) {
mManager.recordUserActionWithOptionalSearch("SelectionEstablished");
}
}
}
/** Configures the call button area using the given entry. */
private void configureCallButton(String callText, CharSequence nbrLabel, CharSequence number) {
View convertView = getView().findViewById(R.id.call_and_sms);
convertView.setVisibility(TextUtils.isEmpty(number) ? View.GONE : View.VISIBLE);
TextView text = (TextView) convertView.findViewById(R.id.call_and_sms_text);
View mainAction = convertView.findViewById(R.id.call_and_sms_main_action);
mainAction.setOnClickListener(mPrimaryActionListener);
mainAction.setContentDescription(callText);
if(TextUtils.isEmpty(number)) {
number = "";
}
mainAction.setTag(SipUri.getCanonicalSipContact(number.toString(), false));
text.setText(callText);
TextView label = (TextView) convertView.findViewById(R.id.call_and_sms_label);
if (TextUtils.isEmpty(nbrLabel)) {
label.setVisibility(View.GONE);
} else {
label.setText(nbrLabel);
label.setVisibility(View.VISIBLE);
}
}
/**
* Add a content description to the specified swatch view. Because the colors get added in a
* snaking form, every other row will need to compensate for the fact that the colors are added
* in an opposite direction from their left->right/top->bottom order, which is how the system
* will arrange them for accessibility purposes.
*/
private void setSwatchDescription(int rowNumber, int index, int rowElements, boolean selected,
View swatch, String[] contentDescriptions) {
String description;
if (contentDescriptions != null && contentDescriptions.length > index) {
description = contentDescriptions[index];
} else {
int accessibilityIndex;
if (rowNumber % 2 == 0) {
// We're in a regular-ordered row
accessibilityIndex = index + 1;
} else {
// We're in a backwards-ordered row.
int rowMax = ((rowNumber + 1) * mNumColumns);
accessibilityIndex = rowMax - rowElements;
}
if (selected) {
description = String.format(mDescriptionSelected, accessibilityIndex);
} else {
description = String.format(mDescription, accessibilityIndex);
}
}
swatch.setContentDescription(description);
}
private void setSwatchDescription(int rowNumber, int index, int rowElements, boolean selected,
View swatch) {
int accessibilityIndex;
if (rowNumber % 2 == 0) {
// We're in a regular-ordered row
accessibilityIndex = index;
} else {
// We're in a backwards-ordered row.
int rowMax = ((rowNumber + 1) * mNumColumns);
accessibilityIndex = rowMax - rowElements;
}
String description;
if (selected) {
description = String.format(mDescriptionSelected, accessibilityIndex);
} else {
description = String.format(mDescription, accessibilityIndex);
}
swatch.setContentDescription(description);
}
/**
* Add a content description to the specified swatch view. Because the colors get added in a snaking form, every
* other row will need to compensate for the fact that the colors are added in an opposite direction from their
* left to right/top to bottom order, which is how the system will arrange them for accessibility purposes.
*
* @param rowNumber The row number.
* @param index The index of the view.
* @param rowElements The number of elements in the row.
* @param selected Flag indicating if the swatch is selected.
* @param swatch The swatch to be affected.
*/
private void setSwatchDescription(final int rowNumber, final int index, final int rowElements,
final boolean selected,
@NonNull final View swatch) {
int accessibilityIndex;
if (rowNumber % 2 == 0) {
// We're in a regular-ordered row
accessibilityIndex = index;
}
else {
// We're in a backwards-ordered row.
int rowMax = (rowNumber + 1) * mNumColumns;
accessibilityIndex = rowMax - rowElements;
}
String description;
if (selected) {
description = String.format(mDescriptionSelected, accessibilityIndex);
}
else {
description = String.format(mDescription, accessibilityIndex);
}
swatch.setContentDescription(description);
}
@Override
public void run() {
View container = findViewById(R.id.container);
collectId(mInstance.getRootComponent(),mIDMap);
container.setContentDescription(JSON.toJSONString(mIDMap));
mWXHandler.removeCallbacks(this);
mWXHandler.postDelayed(this,2000);
}
@Test
public void withContentDescriptionFromResourceId() {
View view = new View(context);
view.setContentDescription(context.getString(R.string.something));
assertFalse(withContentDescription(R.string.other_string).matches(view));
assertTrue(withContentDescription(R.string.something).matches(view));
}
@Test
public void hasContentDescriptionTest() {
View view = new View(context);
view.setContentDescription(null);
assertFalse(hasContentDescription().matches(view));
CharSequence testText = "test text!";
view.setContentDescription(testText);
assertTrue(hasContentDescription().matches(view));
}
/**
* Swap the content descriptions.
*/
void swapContentDescriptions(WaypointsListViewHolder endViewHolder) {
final View startDragView = getDraggableView();
final View endDragView = endViewHolder.getDraggableView();
final View startRemoveView = getRemovableView();
final View endRemoveView = endViewHolder.getRemovableView();
final CharSequence startDragViewContentDescription = startDragView.getContentDescription();
final CharSequence startRemoveViewContentDescription = startRemoveView.getContentDescription();
// start swapping
startDragView.setContentDescription(endDragView.getContentDescription());
startRemoveView.setContentDescription(endRemoveView.getContentDescription());
endDragView.setContentDescription(startDragViewContentDescription);
endRemoveView.setContentDescription(startRemoveViewContentDescription);
}
private void populateTabStrip() {
final PagerAdapter adapter = mViewPager.getAdapter();
final OnClickListener tabClickListener = new TabClickListener();
for (int i = 0; i < adapter.getCount(); i++) {
View tabView = null;
TabItemSpec tabItem;
if (this.mTabItems != null && this.mTabItems.length > i) {
tabItem = this.mTabItems[i];
} else {
tabItem = new TabItemSpec();
tabItem.title = adapter.getPageTitle(i).toString();
}
tabView = createDefaultTabView(getContext(), tabItem);
tabView.setOnClickListener(tabClickListener);
String desc = mContentDescriptions.get(i, null);
if (desc != null) {
tabView.setContentDescription(desc);
}
mTabStrip.addView(tabView);
if (i == mViewPager.getCurrentItem()) {
tabView.setSelected(true);
}
}
}
/**
* Add a content description to the specified swatch view. Because the colors get added in a
* snaking form, every other row will need to compensate for the fact that the colors are added
* in an opposite direction from their left->right/top->bottom order, which is how the system
* will arrange them for accessibility purposes.
*/
private void setSwatchDescription(int rowNumber, int index, int rowElements, boolean selected,
View swatch, String[] contentDescriptions) {
String description;
if (contentDescriptions != null && contentDescriptions.length > index) {
description = contentDescriptions[index];
} else {
int accessibilityIndex;
if (mBackwardsOrder) {
if (rowNumber % 2 == 0) {
// We're in a regular-ordered row
accessibilityIndex = index + 1;
} else {
// We're in a backwards-ordered row.
int rowMax = ((rowNumber + 1) * mNumColumns);
accessibilityIndex = rowMax - rowElements;
}
} else {
accessibilityIndex = index + 1;
}
if (selected) {
description = String.format(mDescriptionSelected, accessibilityIndex);
} else {
description = String.format(mDescription, accessibilityIndex);
}
}
swatch.setContentDescription(description);
}
public static void setAccessiblityIgnore(View view) {
view.setClickable(false);
view.setFocusable(false);
view.setContentDescription("");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
view.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
}
}
private void populateTabStrip() {
final PagerAdapter adapter = mViewPager.getAdapter();
final OnClickListener tabClickListener = new TabClickListener();
for (int i = 0; i < adapter.getCount(); i++) {
View tabView = null;
Version1TextView tabTitleView = null;
if (mTabViewLayoutId != 0) {
// If there is a custom tab view layout id set, try and inflate it
tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip,
false);
tabTitleView = (Version1TextView) tabView.findViewById(mTabViewTextViewId);
}
if (tabView == null) {
tabView = createDefaultTabView(getContext());
}
if (tabTitleView == null && Version1TextView.class.isInstance(tabView)) {
tabTitleView = (Version1TextView) tabView;
}
if (mDistributeEvenly) {
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) tabView.getLayoutParams();
lp.width = 0;
lp.weight = 1;
}
tabTitleView.setText(adapter.getPageTitle(i));
tabTitleView.setTextSize(12);
tabTitleView.setTypeface(FontUtils.getDemi(getContext()));
tabTitleView.setTextColor(getResources().getColorStateList(R.color.sliding_tab_text_color_selector));
tabView.setOnClickListener(tabClickListener);
String desc = mContentDescriptions.get(i, null);
if (desc != null) {
tabView.setContentDescription(desc);
}
mTabStrip.addView(tabView);
if (i == mViewPager.getCurrentItem()) {
tabView.setSelected(true);
}
}
}
private void trySetContentDescription(View root, int viewId, int contDescResId) {
View target = root.findViewById(viewId);
if (target != null) {
target.setContentDescription(mContext.getString(contDescResId));
}
}
@Override
public View getView(Optional<View> optionalView,
LocalFilmstripDataAdapter adapter, boolean isInProgress,
final VideoClickedCallback videoClickedCallback)
{
View view;
VideoViewHolder viewHolder;
if (optionalView.isPresent())
{
view = optionalView.get();
viewHolder = getViewHolder(view);
} else
{
view = LayoutInflater.from(mContext).inflate(R.layout.filmstrip_video, null);
view.setTag(R.id.mediadata_tag_viewtype, getItemViewType().ordinal());
ImageView videoView = (ImageView) view.findViewById(R.id.video_view);
ImageView playButton = (ImageView) view.findViewById(R.id.play_button);
viewHolder = new VideoViewHolder(videoView, playButton);
view.setTag(R.id.mediadata_tag_target, viewHolder);
}
if (viewHolder != null)
{
// ImageView for the play icon.
viewHolder.mPlayButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
videoClickedCallback.playVideo(mData.getUri(), mData.getTitle());
}
});
view.setContentDescription(mContext.getResources().getString(
R.string.video_date_content_description,
mDateFormatter.format(mData.getLastModifiedDate())));
renderTiny(viewHolder);
} else
{
Log.w(TAG, "getView called with a view that is not compatible with VideoItem.");
}
return view;
}
private void populateTabStrip() {
final PagerAdapter adapter = mViewPager.getAdapter();
final OnClickListener tabClickListener = new TabClickListener();
for (int i = 0; i < adapter.getCount(); i++) {
View tabView = null;
View tabTitleView = null;
if (mTabViewLayoutId != 0) {
// If there is a custom tab view layout id set, try and inflate it
tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip, false);
tabTitleView = tabView.findViewById(mTabViewTextViewId);
}
if (tabView == null) {
tabView = createDefaultTabView(getContext());
}
if (tabTitleView == null && TextView.class.isInstance(tabView)) {
tabTitleView = tabView;
}
if (mDistributeEvenly) {
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) tabView.getLayoutParams();
lp.width = 0;
lp.weight = 1;
}
if (TextView.class.isInstance(tabTitleView)) {
((TextView) tabTitleView).setText(adapter.getPageTitle(i));
} else if (ImageView.class.isInstance(tabTitleView) && adapter instanceof TabIconProvider){
TabIconProvider mTabIconProvider = (TabIconProvider) adapter;
tabTitleView.setBackgroundResource(mTabIconProvider.getPageIconResId(i));
}
tabView.setOnClickListener(tabClickListener);
String desc = mContentDescriptions.get(i, null);
if (desc != null) {
tabView.setContentDescription(desc);
}
mTabStrip.addView(tabView);
if (i == mViewPager.getCurrentItem()) {
tabView.setSelected(true);
}
}
}
/**
* Constructs a new omnibox suggestion view.
*
* @param context The context used to construct the suggestion view.
* @param locationBar The location bar showing these suggestions.
*/
public SuggestionView(Context context, LocationBar locationBar) {
super(context);
mLocationBar = locationBar;
mSuggestionHeight =
context.getResources().getDimensionPixelOffset(R.dimen.omnibox_suggestion_height);
mSuggestionAnswerHeight =
context.getResources().getDimensionPixelOffset(
R.dimen.omnibox_suggestion_answer_height);
TypedArray a = getContext().obtainStyledAttributes(
new int [] {R.attr.selectableItemBackground});
Drawable itemBackground = a.getDrawable(0);
a.recycle();
mContentsView = new SuggestionContentsContainer(context, itemBackground);
addView(mContentsView);
mRefineView = new View(context) {
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mRefineIcon == null) return;
canvas.save();
canvas.translate(
(getMeasuredWidth() - mRefineIcon.getIntrinsicWidth()) / 2f,
(getMeasuredHeight() - mRefineIcon.getIntrinsicHeight()) / 2f);
mRefineIcon.draw(canvas);
canvas.restore();
}
@Override
public void setVisibility(int visibility) {
super.setVisibility(visibility);
if (visibility == VISIBLE) {
setClickable(true);
setFocusable(true);
} else {
setClickable(false);
setFocusable(false);
}
}
@Override
protected void drawableStateChanged() {
super.drawableStateChanged();
if (mRefineIcon != null && mRefineIcon.isStateful()) {
mRefineIcon.setState(getDrawableState());
}
}
};
mRefineView.setContentDescription(getContext().getString(
R.string.accessibility_omnibox_btn_refine));
// Although this has the same background as the suggestion view, it can not be shared as
// it will result in the state of the drawable being shared and always showing up in the
// refine view.
mRefineView.setBackground(itemBackground.getConstantState().newDrawable());
mRefineView.setId(R.id.refine_view_id);
mRefineView.setClickable(true);
mRefineView.setFocusable(true);
mRefineView.setLayoutParams(new LayoutParams(0, 0));
addView(mRefineView);
mRefineWidth = getResources()
.getDimensionPixelSize(R.dimen.omnibox_suggestion_refine_width);
mUrlBar = (UrlBar) locationBar.getContainerView().findViewById(R.id.url_bar);
mPhoneUrlBarLeftOffsetPx = getResources().getDimensionPixelOffset(
R.dimen.omnibox_suggestion_phone_url_bar_left_offset);
mPhoneUrlBarLeftOffsetRtlPx = getResources().getDimensionPixelOffset(
R.dimen.omnibox_suggestion_phone_url_bar_left_offset_rtl);
}
private void trySetContentDescription(View root, int viewId, int contDescResId) {
View target = root.findViewById(viewId);
if (target != null) {
target.setContentDescription(mContext.getString(contDescResId));
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
int layoutId;
if (exercise == null || tutorialController == null || callback == null) {
return null;
}
if (exercise.needScrollableContainer()) {
layoutId = R.layout.tutorial_lesson_fragment_scrollable;
} else {
layoutId = R.layout.tutorial_lesson_fragment;
}
View view = inflater.inflate(layoutId, container, false);
description = (TextView) view.findViewById(R.id.description);
description.setText(page.getDescription());
TextView subTitle = (TextView) view.findViewById(R.id.part_subtitle);
subTitle.setText(page.getSubtitle());
TextView currentPage = (TextView) view.findViewById(R.id.current_page);
TextView next = (TextView) view.findViewById(R.id.next);
if (this.currentPage < lesson.getPagesCount() - 1) {
next.setText(R.string.tutorial_next);
currentPage.setVisibility(View.VISIBLE);
currentPage.setText(
getString(
R.string.tutorial_page_number_of, this.currentPage + 1, lesson.getPagesCount() - 1));
} else if (tutorialController.getNextLesson(lesson) == null) {
next.setText(R.string.tutorial_home);
} else {
next.setText(R.string.tutorial_next_lesson);
}
next.setOnClickListener(this);
View previous = view.findViewById(R.id.previous_page);
previous.setOnClickListener(this);
previous.setContentDescription(getString(R.string.tutorial_previous));
ViewGroup contentContainer = (ViewGroup) view.findViewById(R.id.practice_area);
View contentView = page.getExercise().getContentView(inflater, contentContainer);
ViewGroup.LayoutParams params =
new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
contentContainer.addView(contentView, params);
return view;
}
/**
* Constructs a new omnibox suggestion view.
*
* @param context The context used to construct the suggestion view.
* @param locationBar The location bar showing these suggestions.
*/
public SuggestionView(Context context, LocationBar locationBar) {
super(context);
mLocationBar = locationBar;
mSuggestionHeight =
context.getResources().getDimensionPixelOffset(R.dimen.omnibox_suggestion_height);
mSuggestionAnswerHeight =
context.getResources().getDimensionPixelOffset(
R.dimen.omnibox_suggestion_answer_height);
TypedArray a = getContext().obtainStyledAttributes(
new int [] {R.attr.selectableItemBackground});
Drawable itemBackground = a.getDrawable(0);
a.recycle();
mContentsView = new SuggestionContentsContainer(context, itemBackground);
addView(mContentsView);
mRefineView = new View(context) {
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mRefineIcon == null) return;
canvas.save();
canvas.translate(
(getMeasuredWidth() - mRefineIcon.getIntrinsicWidth()) / 2f,
(getMeasuredHeight() - mRefineIcon.getIntrinsicHeight()) / 2f);
mRefineIcon.draw(canvas);
canvas.restore();
}
@Override
public void setVisibility(int visibility) {
super.setVisibility(visibility);
if (visibility == VISIBLE) {
setClickable(true);
setFocusable(true);
} else {
setClickable(false);
setFocusable(false);
}
}
@Override
protected void drawableStateChanged() {
super.drawableStateChanged();
if (mRefineIcon != null && mRefineIcon.isStateful()) {
mRefineIcon.setState(getDrawableState());
}
}
};
mRefineView.setContentDescription(getContext().getString(
R.string.accessibility_omnibox_btn_refine));
// Although this has the same background as the suggestion view, it can not be shared as
// it will result in the state of the drawable being shared and always showing up in the
// refine view.
mRefineView.setBackground(itemBackground.getConstantState().newDrawable());
mRefineView.setId(R.id.refine_view_id);
mRefineView.setClickable(true);
mRefineView.setFocusable(true);
mRefineView.setLayoutParams(new LayoutParams(0, 0));
addView(mRefineView);
mRefineWidth = getResources()
.getDimensionPixelSize(R.dimen.omnibox_suggestion_refine_width);
mUrlBar = (UrlBar) locationBar.getContainerView().findViewById(R.id.url_bar);
mPhoneUrlBarLeftOffsetPx = getResources().getDimensionPixelOffset(
R.dimen.omnibox_suggestion_phone_url_bar_left_offset);
mPhoneUrlBarLeftOffsetRtlPx = getResources().getDimensionPixelOffset(
R.dimen.omnibox_suggestion_phone_url_bar_left_offset_rtl);
}