آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

Problem in dropDownWidth of Spinner

Amirho707  6 سال پیش  6 سال پیش
0 0

با سلام یه مشکلی هست و آن اینکه یه اسپینر ایجاد کردم و میخوام اون اسپینر وقتی dropDown میشه عرضش کل صفحه را بگیره اما وقتی میزنم که dropDownWidth = match-parent باشه ، کار نمیکنه ، اگر کسی هست که بتواند کمک کنه ممنون میشم .

 برای این سوال 2 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
jbRhmNqb  6 سال پیش
+1 0

به جای MATCH_PARRENT باید از getWidth() استفاده کنین
این متد پایین رو یکم چکش کاریش کنین تا اون چیزی که میخواین در بیاد...

  private void initializeDropdownWidth() {
        final ArrayAdapter<String> adapter = (ArrayAdapter<String>) txtSpinner.getAdapter();
        txtSpinner.setAdapter(null);
        if (txtSpinner.getVisibility() == VISIBLE) {
            for (int x = 0; x < adapter.getCount(); x++) {
                TextView text = (TextView) adapter.getView(x, null, null);
                text.measure(0, 0);
                int width = text.getMeasuredWidth();
                if (width > maxDropdownWidth) {
                    maxDropdownWidth = width;
                }
            }
            Handler handler = new Handler();
            handler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    if (txtSpinner.getWidth() != 0) {
                        if (maxDropdownWidth + 150 < txtSpinner.getWidth()) {
                            txtSpinner.setDropDownWidth(txtSpinner.getWidth() - 150);
                            txtSpinner.setDropDownHorizontalOffset(txtSpinner.getWidth() / 2 - txtSpinner.getDropDownWidth() / 2);
                        } else if (maxDropdownWidth > txtSpinner.getWidth()) {
                            if (maxDropdownWidth + 20 < context.getResources().getDisplayMetrics().widthPixels) {
                                txtSpinner.setDropDownWidth(maxDropdownWidth + 20);
                            } else {
                                txtSpinner.setDropDownWidth(context.getResources().getDisplayMetrics().widthPixels);
                            }
                        }
                        txtSpinner.setDropDownVerticalOffset( -1 * txtSpinner.getHeight());
                    }
                    txtSpinner.setAdapter(adapter);
                }
            }, 200);
        }

    }
پاسخ به سوال 
Amirho707  6 سال پیش
+1 0

 پاسخ صحیح

متشکرم بابت پاسخ کدشو میزارم که کسی خواست استفاده کنه ، ممنون

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

Spinner sp_angle;
private int maxDropdownWidth = 1500;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

context = MainActivity.this;

sp_angle = findViewById(R.id.sp_angle);

final ArrayAdapter<String> adapter = (ArrayAdapter<String>) sp_angle.getAdapter();
sp_angle.setAdapter(null);
if (sp_angle.getVisibility() == VISIBLE) {
for (int x = 0; x < adapter.getCount(); x++) {
TextView text = (TextView) adapter.getView(x, null, null);
text.measure(0, 0);
int width = text.getMeasuredWidth();
if (width > maxDropdownWidth) {
maxDropdownWidth = width;
}
}
Handler handler = new Handler();
handler.postDelayed(new Runnable() {

@Override
public void run() {
if (sp_angle.getWidth() != 0) {
if (maxDropdownWidth + 150 < sp_angle.getWidth()) {
sp_angle.setDropDownWidth(sp_angle.getWidth() - 150);
sp_angle.setDropDownHorizontalOffset(sp_angle.getWidth() / 2 - sp_angle.getDropDownWidth() / 2);
} else if (maxDropdownWidth > sp_angle.getWidth()) {
if (maxDropdownWidth + 20 < context.getResources().getDisplayMetrics().widthPixels) {
sp_angle.setDropDownWidth(maxDropdownWidth + 20);
} else {
sp_angle.setDropDownWidth(context.getResources().getDisplayMetrics().widthPixels);
}
}
sp_angle.setDropDownVerticalOffset( -1 * sp_angle.getHeight());
}

sp_angle.setAdapter(adapter);
}
}, 200);
}
sp_angle.setOnItemSelectedListener(this);

}


@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String text = parent.getItemAtPosition(position).toString();
Toast.makeText(parent.getContext(),text,Toast.LENGTH_SHORT).show();
}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
}

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .